From eccefc6650afee08ebc71bcb8ba93fe5dba91333 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sat, 1 Aug 2026 22:49:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.env.example | 3 +- backend/app.pid | 2 +- backend/app/api/crm_contract_routes.py | 2 +- backend/app/api/crm_quote_routes.py | 4 +- backend/app/core/config.py | 2 + backend/app/core/storage.py | 32 +- backend/app/services/bx/storage.py | 8 +- backend/graphify-out/.graphify_labels.json | 3 + .../2026-08-01/.graphify_labels.json | 3 - .../graphify-out/2026-08-01/GRAPH_REPORT.md | 293 +- backend/graphify-out/2026-08-01/graph.json | 1842 +++++--- backend/graphify-out/2026-08-01/manifest.json | 2756 ++++++------ backend/graphify-out/GRAPH_REPORT.md | 385 +- ...9cc8904e07390d47447b0ce238888ba15316e.json | 1 + ...2cfee9712f600b370c4f6e7a5fc4c70e12f37.json | 1 + ...b5d961f68f134496e63057f8f54c51641bb63.json | 1 + ...6cf4c37e03d218bb9f1ce51e2a55d7fce1807.json | 1 + ...35ebbdf48b071c014737e1da1aa38902559ac.json | 1 + backend/graphify-out/cache/stat-index.json | 2 +- backend/graphify-out/graph.html | 8 +- backend/graphify-out/graph.json | 1969 ++++----- .../PRODUCTION_MIGRATION_RUNLOG.md | 8 + .../mappings/bx_advance_apply_id_mapping.csv | 26 +- .../bx_advance_approval_id_mapping.csv | 54 +- .../mappings/bx_attachment_id_mapping.csv | 310 +- .../mappings/bx_expense_item_id_mapping.csv | 96 +- .../bx_reimburse_apply_id_mapping.csv | 254 +- .../bx_reimburse_approval_id_mapping.csv | 390 +- .../bx_reimburse_detail_id_mapping.csv | 340 +- .../bx_reimburse_offset_id_mapping.csv | 8 +- .../mappings/bx_workflow_def_id_mapping.csv | 4 +- .../mappings/bx_workflow_node_id_mapping.csv | 8 +- .../mappings/crm_clue_id_mapping.csv | 2 +- .../mappings/crm_contract_id_mapping.csv | 1928 ++++----- .../mappings/crm_customer_id_mapping.csv | 505 +-- .../crm_customer_license_url_backfill.csv | 3 +- .../mappings/crm_invoice_info_id_mapping.csv | 404 +- .../mappings/crm_oss_biz_backfill.csv | 5 + .../mappings/crm_oss_id_mapping.csv | 717 ++-- .../mappings/crm_oss_unresolved.csv | 2 + .../crm_product_category_id_mapping.csv | 10 +- .../mappings/crm_product_id_mapping.csv | 495 +-- .../mappings/crm_quote_id_mapping.csv | 1975 ++++----- .../mappings/dibang_id_mapping.json | 59 +- docs/sql/dibang.sql | 90 +- docs/sql/sx.sql | 891 ++-- graphify-out/manifest.json | 38 +- web-admin/graphify-out/.graphify_labels.json | 30 +- .../2026-08-01/.graphify_labels.json | 9 - .../graphify-out/2026-08-01/GRAPH_REPORT.md | 570 ++- web-admin/graphify-out/2026-08-01/graph.json | 3450 ++++++++------- web-admin/graphify-out/GRAPH_REPORT.md | 632 +-- web-admin/graphify-out/graph.json | 3766 +++++++++-------- web-admin/src/assets/styles/core/app.scss | 11 +- web-admin/src/assets/styles/core/el-ui.scss | 22 +- web-admin/src/assets/styles/core/reset.scss | 8 + .../attachment-upload-field/index.vue | 35 +- .../pl-plan-hazard-cert-view-table/index.vue | 4 - .../index.vue | 2 - web-admin/src/utils/crm-attachment.ts | 9 +- web-admin/src/views/bx/view/all/index.vue | 50 +- web-admin/src/views/bx/view/mine/index.vue | 50 +- web-admin/src/views/crm/contract/index.vue | 8 +- 63 files changed, 13267 insertions(+), 11330 deletions(-) create mode 100644 backend/graphify-out/cache/ast/v0.9.4/030260b446ad51a39654ee9bc869cc8904e07390d47447b0ce238888ba15316e.json create mode 100644 backend/graphify-out/cache/ast/v0.9.4/8dc61a9acfd6c688d60733291382cfee9712f600b370c4f6e7a5fc4c70e12f37.json create mode 100644 backend/graphify-out/cache/ast/v0.9.4/9d8b58b75789fcdb58745877c28b5d961f68f134496e63057f8f54c51641bb63.json create mode 100644 backend/graphify-out/cache/ast/v0.9.4/bcca3bde37f41523158b4f083c56cf4c37e03d218bb9f1ce51e2a55d7fce1807.json create mode 100644 backend/graphify-out/cache/ast/v0.9.4/f3dde2ec4a7cabd674c24ca7e6735ebbdf48b071c014737e1da1aa38902559ac.json diff --git a/backend/.env.example b/backend/.env.example index 74a085be5..06cd24cce 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -54,7 +54,8 @@ DEFAULT_TENANT_NO=shanxia2.0 # MINIO_SECRET_KEY=CHANGEME # MINIO_BUCKET=sanqiang # MINIO_SECURE=false -# MINIO_BASE_URL=https://www.chengyantek.cn/sanqiang +# 浏览器公开前缀(建议 HTTPS 同域反代);配置后预签名按该主机签发 +# MINIO_BASE_URL=https://w.shanxiachem.com/ruoyi # 阿里云 OCR(身份证 / 驾驶证识别;本地填真实 Key,勿提交 git) # ALIYUN_OCR_ACCESS_KEY_ID=CHANGEME diff --git a/backend/app.pid b/backend/app.pid index 2ea3126d3..d02f5a835 100644 --- a/backend/app.pid +++ b/backend/app.pid @@ -1 +1 @@ -10706 +38117 diff --git a/backend/app/api/crm_contract_routes.py b/backend/app/api/crm_contract_routes.py index 51f1848c4..2905d1fdf 100644 --- a/backend/app/api/crm_contract_routes.py +++ b/backend/app/api/crm_contract_routes.py @@ -224,7 +224,7 @@ def register_contract_routes(router): tenant_no = get_tenant_no(db, _user) user_info = crm_user_info(_user) id_list = [x.strip() for x in ids.split(",") if x.strip()] - soft_delete_contracts(db, id_list, tenant_no=tenant_no) + soft_delete_contracts(db, id_list, tenant_no=tenant_no, user_info=user_info) return success_response(None, message="删除成功") except ValueError as e: return error_response(400, str(e)) diff --git a/backend/app/api/crm_quote_routes.py b/backend/app/api/crm_quote_routes.py index 967638d5c..fac7f4088 100644 --- a/backend/app/api/crm_quote_routes.py +++ b/backend/app/api/crm_quote_routes.py @@ -196,7 +196,7 @@ def register_quote_routes(router): try: tenant_no = get_tenant_no(db, _user) user_info = crm_user_info(_user) - soft_delete_quotes(db, body.ids, tenant_no=tenant_no) + soft_delete_quotes(db, body.ids, tenant_no=tenant_no, user_info=user_info) return success_response(None, message="删除成功") except ValueError as e: return error_response(400, str(e)) @@ -598,7 +598,7 @@ def register_quote_routes(router): try: tenant_no = get_tenant_no(db, _user) user_info = crm_user_info(_user) - soft_delete_quote_products(db, body.ids, tenant_no=tenant_no) + soft_delete_quote_products(db, body.ids, tenant_no=tenant_no, user_info=user_info) return success_response(None, message="删除成功") except ValueError as e: return error_response(400, str(e)) diff --git a/backend/app/core/config.py b/backend/app/core/config.py index fea33a6f5..8fc6271fa 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -91,6 +91,8 @@ class Settings(BaseSettings): MINIO_SECRET_KEY: str = "" MINIO_BUCKET: str = "" MINIO_SECURE: bool = False + # 浏览器可访问的公开前缀(建议 HTTPS 同域反代,如 https://w.shanxiachem.com/ruoyi)。 + # 配置后:普通 get_url 用此前缀;预签名预览/下载按该主机签发(避免 HTTPS 页 Mixed Content)。 MINIO_BASE_URL: str = "" # 微信支付配置 (生产环境必需) diff --git a/backend/app/core/storage.py b/backend/app/core/storage.py index 0891ec158..72e99bf50 100644 --- a/backend/app/core/storage.py +++ b/backend/app/core/storage.py @@ -23,8 +23,8 @@ import uuid import base64 from io import BytesIO from datetime import datetime, timedelta -from urllib.parse import quote -from typing import Optional, BinaryIO +from urllib.parse import quote, urlparse +from typing import Any, Optional, BinaryIO from pathlib import Path from app.core.config import settings @@ -280,9 +280,33 @@ class MinIOStorage(BaseStorage): else: scheme = "https" if settings.MINIO_SECURE else "http" self.base_url = f"{scheme}://{settings.MINIO_ENDPOINT}/{self.bucket_name}" + # 预签名给浏览器用:优先按 MINIO_BASE_URL 的主机签发,上传/删除仍走内网 client + self._presign_client = self._build_presign_client(Minio) except ImportError: raise ImportError("请安装 MinIO SDK: pip install minio") + def _build_presign_client(self, minio_cls: Any) -> Any: + """从 MINIO_BASE_URL 解析公网 endpoint;未配置或与内网相同时复用 self.client。""" + raw = (settings.MINIO_BASE_URL or "").strip() + if not raw: + return self.client + parsed = urlparse(raw if "://" in raw else f"https://{raw}") + host = parsed.hostname + if not host: + return self.client + endpoint = f"{host}:{parsed.port}" if parsed.port else host + secure = (parsed.scheme or "https").lower() != "http" + if endpoint == settings.MINIO_ENDPOINT and secure == bool(settings.MINIO_SECURE): + return self.client + # region 固定:预签名不必经公网反代做 GetBucketLocation(反代常只放行 /bucket/object) + return minio_cls( + endpoint, + access_key=settings.MINIO_ACCESS_KEY, + secret_key=settings.MINIO_SECRET_KEY, + secure=secure, + region="us-east-1", + ) + def _generate_filename(self, filename: str) -> str: """生成唯一文件名""" ext = os.path.splitext(filename)[1] or "" @@ -354,7 +378,7 @@ class MinIOStorage(BaseStorage): ascii_name = name.encode("ascii", "ignore").decode() or "download" encoded = quote(name, safe="") disposition = f'attachment; filename="{ascii_name}"; filename*=UTF-8\'\'{encoded}' - return self.client.presigned_get_object( + return self._presign_client.presigned_get_object( bucket_name=self.bucket_name, object_name=key, expires=timedelta(seconds=expires_seconds), @@ -369,7 +393,7 @@ class MinIOStorage(BaseStorage): response_headers: dict[str, str] = {"response-content-disposition": "inline"} if key.lower().endswith(".pdf"): response_headers["response-content-type"] = "application/pdf" - return self.client.presigned_get_object( + return self._presign_client.presigned_get_object( bucket_name=self.bucket_name, object_name=key, expires=timedelta(seconds=expires_seconds), diff --git a/backend/app/services/bx/storage.py b/backend/app/services/bx/storage.py index c6f42c76b..9ee0048e2 100644 --- a/backend/app/services/bx/storage.py +++ b/backend/app/services/bx/storage.py @@ -1,7 +1,6 @@ """报销附件存储适配 — 复用门户 app.core.storage,对外保持 bx 协议。""" from __future__ import annotations -from datetime import timedelta from io import BytesIO from pathlib import Path @@ -58,11 +57,8 @@ def get_preview_url(file_path: str, *, expires_seconds: int = 3600) -> str: if not key: return "" if isinstance(store, MinIOStorage): - return store.client.presigned_get_object( - bucket_name=store.bucket_name, - object_name=key, - expires=timedelta(seconds=expires_seconds), - ) + # 走 MinIOStorage.presigned_preview_url(按 MINIO_BASE_URL 公网域名签发) + return store.presigned_preview_url(key, expires_seconds=expires_seconds) return store.get_url(key) diff --git a/backend/graphify-out/.graphify_labels.json b/backend/graphify-out/.graphify_labels.json index 2c212c459..a7a56a40a 100644 --- a/backend/graphify-out/.graphify_labels.json +++ b/backend/graphify-out/.graphify_labels.json @@ -163,6 +163,7 @@ "161": "backfill_crm_contract_attachment_urls.py", "162": "BaseStorage", "163": "login_crypto.py", + "164": "get_current_user_by_token", "165": "Community 165", "166": "code:block1 (/iflytek/shanxia2.0/backend)", "167": "Community 167", @@ -171,10 +172,12 @@ "170": "test_quote_approver_setting.py", "171": "LocalStorage", "172": "MinIOStorage", + "173": ".to_tenant_user_dict", "174": "datetime_parse.py", "175": "vehicle_maintenance.py", "176": "_forbid_legacy_invoice_fields", "177": "vehicle_maintenance.py", + "178": "SoftDeleteModel", "180": "menu.py", "185": "vehicle_urea.py", "186": "transport_address.py", diff --git a/backend/graphify-out/2026-08-01/.graphify_labels.json b/backend/graphify-out/2026-08-01/.graphify_labels.json index f456d22e6..2c212c459 100644 --- a/backend/graphify-out/2026-08-01/.graphify_labels.json +++ b/backend/graphify-out/2026-08-01/.graphify_labels.json @@ -163,7 +163,6 @@ "161": "backfill_crm_contract_attachment_urls.py", "162": "BaseStorage", "163": "login_crypto.py", - "164": "apply_pl_scope", "165": "Community 165", "166": "code:block1 (/iflytek/shanxia2.0/backend)", "167": "Community 167", @@ -172,12 +171,10 @@ "170": "test_quote_approver_setting.py", "171": "LocalStorage", "172": "MinIOStorage", - "173": "SysEthnic", "174": "datetime_parse.py", "175": "vehicle_maintenance.py", "176": "_forbid_legacy_invoice_fields", "177": "vehicle_maintenance.py", - "179": "__init__.py", "180": "menu.py", "185": "vehicle_urea.py", "186": "transport_address.py", diff --git a/backend/graphify-out/2026-08-01/GRAPH_REPORT.md b/backend/graphify-out/2026-08-01/GRAPH_REPORT.md index 28814a209..6b384910a 100644 --- a/backend/graphify-out/2026-08-01/GRAPH_REPORT.md +++ b/backend/graphify-out/2026-08-01/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - backend (2026-08-01) ## Corpus Check -- 298 files · ~205,953 words +- 301 files · ~206,587 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 4530 nodes · 15410 edges · 531 communities (514 shown, 17 thin omitted) +- 4540 nodes · 15450 edges · 528 communities (512 shown, 16 thin omitted) - Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 411 edges (avg confidence: 0.53) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `98f33644` +- Built from commit: `ce75576f` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -141,14 +141,11 @@ - [[_COMMUNITY_backfill_crm_contract_attachment_urls.py|backfill_crm_contract_attachment_urls.py]] - [[_COMMUNITY_BaseStorage|BaseStorage]] - [[_COMMUNITY_login_crypto.py|login_crypto.py]] -- [[_COMMUNITY_apply_pl_scope|apply_pl_scope]] - [[_COMMUNITY_codeblock1 (iflytekshanxia2.0backend)|code:block1 (/iflytek/shanxia2.0/backend)]] - [[_COMMUNITY_test_quote_approver_setting.py|test_quote_approver_setting.py]] - [[_COMMUNITY_LocalStorage|LocalStorage]] - [[_COMMUNITY_MinIOStorage|MinIOStorage]] -- [[_COMMUNITY_SysEthnic|SysEthnic]] - [[_COMMUNITY_datetime_parse.py|datetime_parse.py]] -- [[_COMMUNITY___init__.py|__init__.py]] - [[_COMMUNITY_menu.py|menu.py]] - [[_COMMUNITY_crm_quote_pdf.py|crm_quote_pdf.py]] - [[_COMMUNITY_shanxia2.0 后端骨架(FastAPI)|shanxia2.0 后端骨架(FastAPI)]] @@ -171,12 +168,12 @@ - [[_COMMUNITY_PlanResourceSnapshotMixin|PlanResourceSnapshotMixin]] ## God Nodes (most connected - your core abstractions) -1. `BaseModel` - 441 edges +1. `BaseModel` - 442 edges 2. `get_tenant_no()` - 349 edges 3. `DbUserContext` - 254 edges 4. `success_response()` - 253 edges 5. `error_response()` - 235 edges -6. `generate_uuid()` - 193 edges +6. `generate_uuid()` - 195 edges 7. `BxUserContext` - 183 edges 8. `crm_user_info()` - 137 edges 9. `assert_row_deletable_by_creator()` - 83 edges @@ -197,23 +194,23 @@ ## Import Cycles - None detected. -## Communities (531 total, 17 thin omitted) +## Communities (528 total, 16 thin omitted) ### Community 0 - "Community 0" -Cohesion: 0.10 -Nodes (39): _build_public_page(), _build_site_product_read(), _format_file_size(), get_public_site(), _get_site_link_by_token(), _parse_feedback_images(), Session, UploadFile (+31 more) +Cohesion: 0.18 +Nodes (20): _build_public_page(), _format_file_size(), _format_plan_date(), get_public_transport(), _get_transport_by_token(), _parse_feedback_images(), Session, UploadFile (+12 more) ### Community 1 - "Community 1" -Cohesion: 0.15 -Nodes (19): ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody, 审批意见:前端传 commentText,兼容 comment。, StartInstanceBody, TaskActionBody, 流程定义版本 wf_process_version, 流程实例 wf_process_instance (+11 more) +Cohesion: 0.13 +Nodes (23): ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody, StartInstanceBody, 流程定义版本 wf_process_version, 流程实例 wf_process_instance, WfNode, WfProcessInstance (+15 more) ### Community 2 - "Community 2" -Cohesion: 0.30 -Nodes (12): PlCarrier, assert_carrier_eligible_for_transport(), carrier_agreement_expired(), carrier_audit_approved(), carrier_eligible_for_transport(), carrier_qualification_complete(), date, 资质附件均为选填,保留函数签名供兼容调用。 (+4 more) +Cohesion: 0.27 +Nodes (11): assert_carrier_eligible_for_transport(), carrier_agreement_expired(), carrier_audit_approved(), carrier_eligible_for_transport(), carrier_qualification_complete(), date, 资质附件均为选填,保留函数签名供兼容调用。, _urls_nonempty() (+3 more) ### Community 3 - "Community 3" -Cohesion: 0.07 -Nodes (103): attachment_download_url(), attachment_preview_url(), AttachmentDownloadUrlBody, create_dept(), create_dict_data(), create_dict_type(), create_menu(), create_post() (+95 more) +Cohesion: 0.08 +Nodes (100): attachment_download_url(), attachment_preview_url(), AttachmentDownloadUrlBody, create_dept(), create_dict_data(), create_dict_type(), create_menu(), create_post() (+92 more) ### Community 4 - "Community 4" Cohesion: 0.12 @@ -224,8 +221,8 @@ Cohesion: 0.20 Nodes (24): count_source_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings(), load_settings_env(), load_user_mapping() (+16 more) ### Community 6 - "Community 6" -Cohesion: 0.12 -Nodes (51): _generate_notify_message(), PlPlan, PlPlanProduct, PlPlanTransport, 计划产品明细表 pl_plan_product, 计划-运输关联表 pl_plan_transport, PlanArchiveFreightBlock, PlanArchiveProductItem (+43 more) +Cohesion: 0.13 +Nodes (48): PlPlan, PlPlanProduct, 计划产品明细表 pl_plan_product, PlanArchiveFreightBlock, PlanArchiveProductItem, PlanTransportCreateBlock, all_hazard_products_cert_complete(), apply_archive_freight() (+40 more) ### Community 7 - "Community 7" Cohesion: 0.12 @@ -233,23 +230,23 @@ Nodes (36): get_password_hash(), Namespace, build_merged_users(), bx_role_labels ### Community 8 - "Community 8" Cohesion: 0.10 -Nodes (51): _build_quote_filters(), calculate_quote_amount(), create_new_version(), create_quote(), _decimal_value(), _enrich_contact_fields(), _enrich_supplier_name(), _ensure_quote_in_scope() (+43 more) +Nodes (51): create_from_quote(), _quote_products_to_contract_products(), Java: createFromQuote — 返回合同 id, _build_quote_filters(), calculate_quote_amount(), create_quote(), _decimal_value(), _enrich_contact_fields() (+43 more) ### Community 11 - "Community 11" -Cohesion: 0.15 -Nodes (40): PlVehicleUreaApply, PlVehicleUreaDisburse, 车辆尿素申请 pl_vehicle_urea_apply, 车辆尿素发放登记 pl_vehicle_urea_disburse, Decimal, VehicleUreaApplyCreate, VehicleUreaApplyRead, VehicleUreaApplyUpdate (+32 more) +Cohesion: 0.10 +Nodes (55): cancel_apply(), create_apply(), create_disburse(), delete_applies(), delete_disburses(), get_apply(), get_disburse(), list_applies() (+47 more) ### Community 12 - "Community 12" -Cohesion: 0.05 -Nodes (71): contact_add(), contact_delete(), contact_update(), customer_create(), customer_delete(), customer_update(), customer_name_exists(), BaseModel (+63 more) +Cohesion: 0.04 +Nodes (89): contact_add(), contact_delete(), contact_update(), customer_create(), customer_delete(), customer_update(), pool_customer_assign(), pool_customer_claim() (+81 more) ### Community 13 - "Community 13" -Cohesion: 0.17 -Nodes (29): create_instance(), create_process_def(), create_task(), get_all_tasks_for_business(), get_instance(), get_latest_version(), get_nodes_by_version(), get_pending_tasks_by_node() (+21 more) +Cohesion: 0.16 +Nodes (30): create_instance(), create_process_def(), create_task(), get_all_tasks_for_business(), get_instance(), get_latest_version(), get_nodes_by_version(), get_pending_tasks_by_node() (+22 more) ### Community 14 - "Community 14" -Cohesion: 0.16 -Nodes (32): check_document_expiry(), document_reminder_stats(), get_inventory_ledger(), get_summary(), list_document_reminders(), list_transactions(), list_warnings(), date (+24 more) +Cohesion: 0.11 +Nodes (45): check_document_expiry(), document_reminder_stats(), get_inventory_ledger(), get_summary(), list_document_reminders(), list_transactions(), list_warnings(), date (+37 more) ### Community 15 - "Community 15" Cohesion: 0.11 @@ -257,7 +254,7 @@ Nodes (16): BxReimburseApply, BxReimburseApproval, BxReimburseDetail, BxReimburs ### Community 16 - "Community 16" Cohesion: 0.09 -Nodes (60): cancel_apply(), create_apply(), create_record(), delete_applies(), delete_records(), get_apply(), get_record(), list_applies() (+52 more) +Nodes (64): cancel_apply(), create_apply(), create_record(), delete_applies(), delete_records(), get_apply(), get_record(), list_applies() (+56 more) ### Community 18 - "Community 18" Cohesion: 0.09 @@ -265,11 +262,11 @@ Nodes (38): advance_pending_approval_stats(), advance_status_counts(), approve_a ### Community 19 - "Community 19" Cohesion: 0.09 -Nodes (48): _avatar_url_field(), _build_user_info_payload(), change_current_user_password(), get_current_user_profile(), _jwt_user_payload(), logout(), public_quote_share(), Request (+40 more) +Nodes (46): _avatar_url_field(), _build_user_info_payload(), change_current_user_password(), get_current_user_profile(), _jwt_user_payload(), logout(), public_quote_share(), Request (+38 more) ### Community 21 - "Community 21" -Cohesion: 0.09 -Nodes (58): _alias_row_to_dict(), _assert_brand_deletable(), barcode_exists(), _brand_row_to_dict(), _build_category_tree(), category_code_exists(), _category_row_to_dict(), _collect_category_with_ancestors() (+50 more) +Cohesion: 0.08 +Nodes (63): _alias_row_to_dict(), _assert_brand_deletable(), barcode_exists(), _brand_row_to_dict(), _build_category_tree(), category_code_exists(), _category_row_to_dict(), _collect_category_with_ancestors() (+55 more) ### Community 22 - "Community 22" Cohesion: 0.08 @@ -281,63 +278,63 @@ Nodes (8): convert_heic_to_jpeg(), OSSStorage, process_image_content(), QiniuSto ### Community 24 - "Community 24" Cohesion: 0.16 -Nodes (27): CRM 合同子模块路由 — 变更/模板/审批独立页, register_contract_sub_routes(), _change_row_to_dict(), create_contract_change(), execute_change(), export_contract_changes(), export_contract_templates(), _get_change_row() (+19 more) +Nodes (15): ApiRequestLogCRUD, Session, list_ethnics(), Any, Session, 民族码表 CRUD(全局 sys_ethnic), _row_to_dict(), 数据模型(与 docs/sql/shanxia2.0.sql 全库导出基线对齐的核心系统表) (+7 more) ### Community 25 - "Community 25" -Cohesion: 0.09 -Nodes (70): _build_driver_url(), get_plan_arrange_info(), 获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。, _apply_plan_logistics_from_payload(), _apply_transport_arrange_fields(), arrange_transport(), _assert_vehicle_carrier_eligible(), _build_arrange_result() (+62 more) +Cohesion: 0.10 +Nodes (64): get_plan_arrange_info(), 获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。, _apply_plan_logistics_from_payload(), _apply_transport_arrange_fields(), arrange_transport(), _assert_vehicle_carrier_eligible(), _build_arrange_result(), _build_driver_url() (+56 more) ### Community 26 - "Community 26" -Cohesion: 0.15 -Nodes (32): register_contract_routes(), batch_assign_owner(), batch_submit_contract_approval(), download_contract_pdf(), _ensure_contract_in_scope(), finish_contract(), get_contract(), get_contract_detail() (+24 more) +Cohesion: 0.09 +Nodes (58): register_contract_routes(), delete_pending_approvals(), Java: withdraw — 软删除 pending 审批, batch_assign_owner(), batch_submit_contract_approval(), _contract_period_key(), contract_row_to_dict(), create_from_opportunity() (+50 more) ### Community 27 - "Community 27" Cohesion: 0.19 Nodes (28): _apply_plan_product_update(), _apply_plan_update(), AutoGenerateMonthlyResult, _base_query(), create_plan(), delete_plan(), _generate_plan_no(), get_plan() (+20 more) ### Community 28 - "Community 28" -Cohesion: 0.11 -Nodes (57): PlFreightSettlement, PlFreightSettlementApproval, PlFreightSettlementTransport, PlRemittanceVoucher, 运费结算表 pl_freight_settlement, 运费结算审批 pl_freight_settlement_approval, 结算单-运输关联表 pl_freight_settlement_transport, 汇款凭证表 pl_remittance_voucher (+49 more) +Cohesion: 0.12 +Nodes (53): PlFreightSettlement, PlFreightSettlementApproval, 运费结算表 pl_freight_settlement, 运费结算审批 pl_freight_settlement_approval, _advance_after_approval(), _approval_to_dict(), can_user_approve_settlement(), cancel_draft_settlement() (+45 more) ### Community 29 - "Community 29" -Cohesion: 0.24 -Nodes (11): _plan_type_to_business_type(), 按运输计划单据类型解析地磅往来单位(不区分 CRM 合同类型)。 - 入库单 inbound:供方 → party_a,其次 supplier_nam, resolve_partner_company(), _normalize_plan_date(), date, Session, 运输计划 · 工厂现场链接(与地磅出入库单解耦), 入库/出库安排运输:按产品生成现场链接(不写 db_inbound_outbound)。 (+3 more) +Cohesion: 0.17 +Nodes (24): _build_public_page(), _build_site_product_read(), _format_file_size(), get_public_site(), _get_site_link_by_token(), _parse_feedback_images(), Session, UploadFile (+16 more) ### Community 30 - "Community 30" -Cohesion: 0.13 -Nodes (18): menu_badge_stats(), Session, Session, recognize_cert(), RecognizeCertBody, RecognizeCertResult, _auto_fill_create_dept_id(), get_db() (+10 more) +Cohesion: 0.10 +Nodes (33): menu_badge_stats(), Session, Session, recognize_cert(), RecognizeCertBody, RecognizeCertResult, _address_to_read(), _build_address_query() (+25 more) ### Community 33 - "Community 33" Cohesion: 0.20 Nodes (15): bind_biz(), delete_attachment(), download_file(), list_by_biz(), _parse_id_list(), preview_attachment(), Session, UploadFile (+7 more) ### Community 34 - "Community 34" -Cohesion: 0.19 -Nodes (31): assign_customer(), batch_claim_customers(), check_duplicate_customer(), claim_customer(), create_customer(), deal_customer(), _enrich_user_names(), _ensure_customer_in_scope() (+23 more) +Cohesion: 0.14 +Nodes (42): assign_customer(), batch_claim_customers(), check_duplicate_customer(), claim_customer(), create_customer(), deal_customer(), _enrich_user_names(), _ensure_customer_in_scope() (+34 more) ### Community 35 - "Community 35" Cohesion: 0.18 Nodes (36): clear_portal_workflow(), _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_bx_user_mapping(), load_runtime_settings() (+28 more) ### Community 36 - "Community 36" -Cohesion: 0.20 -Nodes (22): approve_task(), _assert_wf_instance_in_scope(), _business_type_label(), create_process_def(), _enrich_task_list(), get_business_all_tasks(), _get_business_form_fields(), get_designer_data() (+14 more) +Cohesion: 0.09 +Nodes (37): API 路由包 — 山峡化工生产一体化门户, get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,14 个一级菜单), approve_task(), _assert_wf_instance_in_scope(), _business_type_label(), create_process_def(), delete_process_def() (+29 more) ### Community 37 - "Community 37" -Cohesion: 0.13 -Nodes (29): _actor_ids(), _actor_names(), assert_row_deletable_by_creator(), assert_rows_deletable_by_creator(), can_delete_by_creator(), is_super_admin(), normalize_user_info(), Any (+21 more) +Cohesion: 0.24 +Nodes (18): _actor_ids(), _actor_names(), assert_row_deletable_by_creator(), assert_rows_deletable_by_creator(), can_delete_by_creator(), is_super_admin(), normalize_user_info(), Any (+10 more) ### Community 38 - "Community 38" -Cohesion: 0.12 -Nodes (28): PlInventory, PlInventoryTransaction, 库存流水表 pl_inventory_transaction, load_brand_qtys_by_plan_product_ids(), persist_plan_product_brand_qtys(), Any, Decimal, Session (+20 more) +Cohesion: 0.13 +Nodes (28): generate_uuid(), PlInventoryTransaction, 库存流水表 pl_inventory_transaction, load_brand_qtys_by_plan_product_ids(), persist_plan_product_brand_qtys(), Any, Decimal, Session (+20 more) ### Community 39 - "Community 39" Cohesion: 0.22 Nodes (28): assign_clues(), check_convert(), check_duplicate_clue(), convert_clue(), create_clue(), _enrich_user_names(), _ensure_clue_in_scope(), get_clue() (+20 more) ### Community 42 - "Community 42" -Cohesion: 0.19 -Nodes (32): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+24 more) +Cohesion: 0.20 +Nodes (31): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+23 more) ### Community 43 - "Community 43" Cohesion: 0.10 @@ -348,20 +345,20 @@ Cohesion: 0.15 Nodes (14): _db_pool_keepalive_loop(), _error_json(), lifespan(), Exception, Request, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, 定期 ping MySQL,避免远程库/NAT 回收空闲 TCP 后首请求长时间卡住。 (+6 more) ### Community 45 - "Community 45" -Cohesion: 0.17 -Nodes (24): create_personnel(), list_personnel(), list_vehicles(), _personnel_to_detail(), _personnel_to_read(), update_personnel(), PlCert, CertRead (+16 more) +Cohesion: 0.19 +Nodes (17): ApiRequestLogMiddleware, _claims_from_auth(), _format_body_bytes(), _persist_log(), Any, Request, 统一记录 API 请求/响应出入参的中间件, _redact_obj() (+9 more) ### Community 46 - "Community 46" -Cohesion: 0.28 -Nodes (17): _address_to_read(), _build_address_query(), create_transport_address(), delete_transport_address(), _get_address(), get_transport_address(), list_all_transport_addresses(), list_transport_addresses() (+9 more) +Cohesion: 0.18 +Nodes (17): get_oper_log_meta(), OperLogMeta, 请求级操作日志元数据(ContextVar), 供异步落库线程使用,避免 ContextVar 跨线程丢失。, set_oper_log_meta(), snapshot_oper_log_meta(), _format_summary(), oper_log() (+9 more) ### Community 48 - "Community 48" -Cohesion: 0.22 -Nodes (26): _apply_inventory_product_update(), _apply_inventory_update(), _base_query(), create_inventory(), create_link_for_plan(), delete_inventory(), _generate_batch_no(), _get_inventory() (+18 more) +Cohesion: 0.18 +Nodes (27): _apply_inventory_product_update(), _apply_inventory_update(), _base_query(), create_inventory(), create_link_for_plan(), delete_inventory(), _generate_batch_no(), _get_inventory() (+19 more) ### Community 49 - "Community 49" Cohesion: 0.07 -Nodes (35): list_ethnics(), Any, Session, 民族码表 CRUD(全局 sys_ethnic), _row_to_dict(), SoftDeleteModel, BizAttachment, 数据模型(与 docs/sql/shanxia2.0.sql 全库导出基线对齐的核心系统表) (+27 more) +Nodes (47): _build_page(), _get_by_token(), _models(), Session, 运输计划 · 入库/出库单现场免登录公共 API, QrCodeResponse, SoftDeleteModel, BizAttachment (+39 more) ### Community 50 - "Community 50" Cohesion: 0.11 @@ -380,12 +377,12 @@ Cohesion: 0.10 Nodes (36): 报销模块认证适配:门户 JWT 用户 → bx 业务上下文。, filter_current_cycle_approvals(), 审批轮次过滤 — 驳回后重新提交时,进度接口仅展示当前轮次。, 审批进度仅展示当前轮次;完整历史由 get_approval_history 返回。, 报销模块 Service 基类 — 租户隔离 + UUID + 软删除。, assert_bx_attachment_biz_in_scope(), assert_bx_biz_in_scope(), assert_bx_row_in_scope() (+28 more) ### Community 54 - "Community 54" -Cohesion: 0.26 -Nodes (23): _get_by_plan(), get_inbound(), get_inbound_by_plan(), _get_order(), get_outbound(), get_outbound_by_plan(), inbound_site_url(), list_inbound() (+15 more) +Cohesion: 0.19 +Nodes (28): _get_by_plan(), get_inbound(), get_inbound_by_plan(), _get_order(), get_outbound(), get_outbound_by_plan(), inbound_site_url(), list_inbound() (+20 more) ### Community 58 - "Community 58" -Cohesion: 0.06 -Nodes (55): operlog_detail(), operlog_list(), Session, 操作日志分页列表(基于 API 请求日志适配 RuoYi OperLog 结构), _user_info(), ApiRequestLogMiddleware, _claims_from_auth(), _format_body_bytes() (+47 more) +Cohesion: 0.17 +Nodes (20): operlog_detail(), operlog_list(), Session, 操作日志分页列表(基于 API 请求日志适配 RuoYi OperLog 结构), _user_info(), 获取用户所有角色的数据权限配置。 返回: [{"data_scope": str, "details": [SysRoleDataScopeDetai, _resolve_user_role_scopes(), _apply_oper_log_scope() (+12 more) ### Community 59 - "Community 59" Cohesion: 0.20 @@ -396,8 +393,8 @@ Cohesion: 0.09 Nodes (37): advance_issue_stats(), batch_offset(), export_advance_issues(), issue_advance(), list_advance_issues(), list_advance_offset_records(), list_pending_payments(), list_processed_payments() (+29 more) ### Community 61 - "Community 61" -Cohesion: 0.19 -Nodes (23): apply_product_snapshot_to_inventory(), apply_product_snapshot_to_plan(), ProductSnapshot, Session, 地磅模块 — CRM 产品解析与快照写入。, 校验 CRM 产品并返回名称/规格快照。新建单据 product_id 必填。, resolve_crm_product(), _create_db_inventory() (+15 more) +Cohesion: 0.18 +Nodes (25): apply_product_snapshot_to_inventory(), apply_product_snapshot_to_plan(), ProductSnapshot, Session, 地磅模块 — CRM 产品解析与快照写入。, 校验 CRM 产品并返回名称/规格快照。新建单据 product_id 必填。, resolve_crm_product(), _create_db_inventory() (+17 more) ### Community 62 - "Community 62" Cohesion: 0.21 @@ -408,8 +405,8 @@ Cohesion: 0.17 Nodes (30): bx_health(), 报销(bx)API 路由聚合 — REST 风格,协议对齐 bx 原系统。, P0 健康检查:验证 bx 路由已挂载且响应协议为 code=0。, approve_reimburse(), approved_by_me(), _build_details_data(), create_reimburse(), delete_reimburse() (+22 more) ### Community 64 - "Community 64" -Cohesion: 0.03 -Nodes (187): category_add(), category_delete(), category_tree(), category_update(), clue_detail(), clue_export(), clue_follow_detail(), clue_follow_statistics() (+179 more) +Cohesion: 0.04 +Nodes (184): category_add(), category_delete(), category_tree(), category_update(), clue_assign(), clue_convert(), clue_create(), clue_delete() (+176 more) ### Community 65 - "Community 65" Cohesion: 0.10 @@ -420,24 +417,24 @@ Cohesion: 0.14 Nodes (25): create_workflow(), delete_workflow(), get_workflow(), get_workflow_by_biz_type(), list_workflows(), Session, save_workflow_nodes(), update_workflow() (+17 more) ### Community 67 - "Community 67" -Cohesion: 0.08 -Nodes (25): clue_assign(), clue_convert(), clue_create(), clue_delete(), clue_follow_create(), clue_follow_delete(), clue_follow_list(), clue_follow_update() (+17 more) +Cohesion: 0.29 +Nodes (16): ensure_crm_customer_linked_row_in_scope(), ensure_crm_owner_row_in_scope(), Session, CRM 数据权限辅助(负责人 owner_user_id + 标准 create_by/create_dept_id)。, 客户子表(开票信息等):先校验关联客户 owner scope,否则校验 create_by。, _clear_default_for_customer(), create_invoice_info(), get_invoice_info() (+8 more) ### Community 68 - "Community 68" Cohesion: 0.22 -Nodes (19): register_quote_routes(), 接口菜单权限守卫。super_admin 直接放行。, require_menu_code(), accept_quote(), generate_pdf(), generate_share(), _get_quote_in_scope(), get_template() (+11 more) +Nodes (20): register_quote_routes(), accept_quote(), create_new_version(), generate_pdf(), generate_share(), _get_quote_in_scope(), get_template(), invalid_quote() (+12 more) ### Community 69 - "Community 69" Cohesion: 0.15 -Nodes (27): _append_user_scope_conditions(), apply_data_scope(), assert_row_in_data_scope(), _collect_scope_ids(), _get_child_dept_ids(), get_user_dept_id(), Session, 数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3 (+19 more) +Nodes (23): _append_user_scope_conditions(), apply_data_scope(), _collect_scope_ids(), _get_child_dept_ids(), get_user_dept_id(), Session, 合并多角色数据范围为 dept_ids / user_ids 并集。, 根据用户角色的数据权限过滤查询。 适用于业务单据列表/详情(报销单、客户、运单等)。 以下场景 SHALL NOT 调用本函数(仅租户隔离即 (+15 more) ### Community 70 - "Community 70" -Cohesion: 0.39 -Nodes (10): create_post(), get_post(), list_posts(), post_code_exists(), Any, Session, _row_to_dict(), soft_delete_post() (+2 more) +Cohesion: 0.19 +Nodes (20): create_post(), get_post(), list_posts(), post_code_exists(), Any, Session, _row_to_dict(), soft_delete_post() (+12 more) ### Community 71 - "Community 71" -Cohesion: 0.11 -Nodes (32): CRM 报价单 API 路由 — 挂接到 crm.router, QuoteApproverSettingSaveBody, QuoteAcceptBody, QuoteApprovalApproveBody, QuoteApprovalListBody, QuoteApprovalRefreshNamesBody, QuoteApprovalWithdrawBody, QuoteCreateBody (+24 more) +Cohesion: 0.10 +Nodes (33): CRM 报价单 API 路由 — 挂接到 crm.router, total_pages(), QuoteApproverSettingSaveBody, QuoteAcceptBody, QuoteApprovalApproveBody, QuoteApprovalListBody, QuoteApprovalRefreshNamesBody, QuoteApprovalWithdrawBody (+25 more) ### Community 72 - "Community 72" Cohesion: 0.19 @@ -460,20 +457,20 @@ Cohesion: 0.16 Nodes (26): clear_target_categories(), compute_level(), count_target_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings() (+18 more) ### Community 81 - "Community 81" -Cohesion: 0.13 -Nodes (19): API 路由包 — 山峡化工生产一体化门户, create_leave(), delete_leave(), get_leave(), _leave_local_callback(), leave_workflow_callback(), list_leaves(), Session (+11 more) +Cohesion: 0.38 +Nodes (10): create_leave(), delete_leave(), get_leave(), _leave_local_callback(), leave_workflow_callback(), list_leaves(), Session, submit_leave() (+2 more) ### Community 83 - "Community 83" -Cohesion: 0.15 -Nodes (30): _advance_contract_after_approval(), approve_contract(), approve_contract_by_contract_id(), approve_pass(), approve_reject(), approve_transfer(), _build_approval_list_filters(), can_user_approve() (+22 more) +Cohesion: 0.09 +Nodes (52): CRM 合同子模块路由 — 变更/模板/审批独立页, register_contract_sub_routes(), _advance_contract_after_approval(), approve_contract(), approve_contract_by_contract_id(), approve_pass(), approve_reject(), approve_transfer() (+44 more) ### Community 84 - "Community 84" Cohesion: 0.23 Nodes (23): build_id_maps(), clip_text(), count_rows(), export_mapping(), fetch_rows(), legacy_id_to_str(), main(), map_id() (+15 more) ### Community 86 - "Community 86" -Cohesion: 0.16 -Nodes (30): _apply_weighing_product_update(), _apply_weighing_update(), _base_query(), create_weighing(), delete_weighing(), _get_weighing(), get_weighing_related(), list_weighing() (+22 more) +Cohesion: 0.14 +Nodes (36): _apply_weighing_product_update(), _apply_weighing_update(), _base_query(), create_weighing(), delete_weighing(), _get_weighing(), get_weighing_related(), list_weighing() (+28 more) ### Community 87 - "Community 87" Cohesion: 0.20 @@ -481,43 +478,43 @@ Nodes (19): approve_quote(), can_user_approve(), create_approval_records(), dele ### Community 88 - "Any" Cohesion: 0.18 -Nodes (31): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), legacy_parent_id(), load_oss_id_to_url(), load_runtime_settings() (+23 more) +Nodes (30): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), legacy_parent_id(), load_oss_id_to_url(), load_runtime_settings() (+22 more) ### Community 89 - "pl_ocr_service.py" Cohesion: 0.19 Nodes (22): PlOcrUsageMonth, 阿里云 OCR 月度调用计数 pl_ocr_usage_month(按自然月全局统计), assert_quota_available(), _build_ocr_client(), compress_image_bytes(), current_usage_month(), _first_attachment_url(), get_or_create_usage_row() (+14 more) ### Community 91 - "pl_vehicle_recharge_service.py" -Cohesion: 0.10 -Nodes (58): _apply_contract_entity_fields(), _build_contract_filters(), _build_customer_address(), _calc_amount_with_tax(), _contract_period_key(), contract_row_to_dict(), create_contract(), create_contract_template() (+50 more) +Cohesion: 0.12 +Nodes (40): _apply_contract_entity_fields(), _build_contract_filters(), _build_customer_address(), _calc_amount_with_tax(), _change_row_to_dict(), create_contract(), create_contract_change(), create_contract_template() (+32 more) ### Community 92 - "Community 92" -Cohesion: 0.15 -Nodes (27): 验证密码(哈希非 bcrypt 或损坏时返回 False,避免抛错), verify_password(), change_password(), create_user(), get_user(), get_user_with_relations(), _hash_password(), list_post_ids_for_user() (+19 more) +Cohesion: 0.14 +Nodes (29): 验证密码(哈希非 bcrypt 或损坏时返回 False,避免抛错), verify_password(), change_password(), create_user(), get_user(), get_user_with_relations(), _hash_password(), list_post_ids_for_user() (+21 more) ### Community 93 - "_invoice_info_by_customer_impl" -Cohesion: 0.16 -Nodes (31): create_contact(), get_contact(), list_contacts_by_customer(), _parse_optional_date(), Any, date, Session, _row_to_dict() (+23 more) +Cohesion: 0.29 +Nodes (16): create_contact(), get_contact(), list_contacts_by_customer(), _parse_optional_date(), Any, date, Session, _row_to_dict() (+8 more) ### Community 94 - "response.py" -Cohesion: 0.28 -Nodes (15): create_clue_follow(), delete_clue_follow(), get_clue_follow(), get_follow_statistics(), list_clue_follows(), Any, Session, 更新线索跟进记录,必要时同步线索 next_time (+7 more) +Cohesion: 0.15 +Nodes (30): create_clue_follow(), delete_clue_follow(), get_clue_follow(), get_follow_statistics(), list_clue_follows(), Any, Session, 更新线索跟进记录,必要时同步线索 next_time (+22 more) ### Community 95 - "Community 95" Cohesion: 0.35 Nodes (11): create_tenant(), get_tenant(), list_tenants(), Any, Session, _row_to_dict(), soft_delete_tenant(), tenant_no_exists() (+3 more) ### Community 97 - "_ensure_subpack_slip_no" -Cohesion: 0.10 -Nodes (53): approve_carrier(), bind_vehicle_driver(), create_carrier(), create_driver(), create_vehicle(), delete_carrier(), delete_driver(), delete_personnel() (+45 more) +Cohesion: 0.07 +Nodes (81): approve_carrier(), bind_vehicle_driver(), create_carrier(), create_driver(), create_personnel(), create_vehicle(), delete_carrier(), delete_driver() (+73 more) ### Community 100 - "price_letter_detail" Cohesion: 0.27 Nodes (15): Settings, BaseSettings, apply_renumber(), build_mapping(), fetch_products(), format_new_product_no(), load_settings_env(), main() (+7 more) ### Community 101 - ".to_tenant_user_dict" -Cohesion: 0.23 -Nodes (12): CRM 模块 Excel 导出列定义(字段与字典类型对齐 Java *Vo @ExcelDictFormat)。, _build_workbook(), DictLabelResolver, export_rows_to_xlsx_response(), ExportColumn, Any, Excel 导出工具:集中处理字典 code → label(对齐 Java ExcelDictConvert / ExcelDictPreloadConver, CRM 列表导出统一入口:表头 + 行数据 + 字典 label 转换 + 文件流响应。 (+4 more) +Cohesion: 0.19 +Nodes (15): CRM 模块 Excel 导出列定义(字段与字典类型对齐 Java *Vo @ExcelDictFormat)。, _build_workbook(), DictLabelResolver, export_rows_to_xlsx_response(), ExportColumn, load_dict_label_maps(), Any, Session (+7 more) ### Community 102 - "dept.py" Cohesion: 0.33 @@ -536,8 +533,8 @@ Cohesion: 0.17 Nodes (16): parse_resource_snapshot(), Any, 运输计划 - 安排运输时车辆/人员/证件资源快照 Schema, 从 ORM 文本列或 dict 解析快照。, SnapshotCertRead, SnapshotPersonnelRow, TransportResourceSnapshot, build_personnel_summary() (+8 more) ### Community 107 - "apply_pl_scope" -Cohesion: 0.20 -Nodes (19): cancel_apply(), create_apply(), create_disburse(), delete_applies(), delete_disburses(), get_apply(), get_disburse(), list_applies() (+11 more) +Cohesion: 0.15 +Nodes (14): invoice_info_add(), invoice_info_by_customer(), _invoice_info_by_customer_impl(), invoice_info_delete(), invoice_info_list(), invoice_info_set_default(), invoice_info_update(), 按客户ID查询开票信息(与 by-customer 等价) (+6 more) ### Community 109 - "Community 109" Cohesion: 0.15 @@ -548,16 +545,16 @@ Cohesion: 0.18 Nodes (17): get_web_auth_menu_codes(), 获取当前用户菜单权限标识(sys_menu.perms,经角色继承)。, get_user_menu_codes(), Session, 读取用户授权的菜单权限标识集合(与前端 meta.menuCode / perms 对齐)。, _expand_with_ancestor_menu_ids(), _granted_menu_ids_for_user(), iter_user_menu_perm_codes() (+9 more) ### Community 111 - "Community 111" -Cohesion: 0.28 -Nodes (14): _assert_editable(), _build_public_page(), _format_file_size(), _get_inventory_by_token(), get_public_inventory(), _parse_feedback_images(), Session, UploadFile (+6 more) +Cohesion: 0.21 +Nodes (17): _assert_editable(), _build_public_page(), _format_file_size(), _get_inventory_by_token(), get_public_inventory(), _parse_feedback_images(), Session, UploadFile (+9 more) ### Community 112 - "storage.py" -Cohesion: 0.22 -Nodes (17): _apply_list_filters(), create_supplier_info(), get_supplier_info(), list_all_supplier_info(), list_supplier_info(), Any, Session, CRM 供方信息 CRUD — 对照 CrmSupplierInfoServiceImpl.java (+9 more) +Cohesion: 0.21 +Nodes (16): _apply_list_filters(), create_supplier_info(), list_all_supplier_info(), list_supplier_info(), Any, Session, CRM 供方信息 CRUD — 对照 CrmSupplierInfoServiceImpl.java, Java: queryList(不分页,报价单下拉) (+8 more) ### Community 113 - "quote_share_log.py" -Cohesion: 0.29 -Nodes (10): list_share_logs(), _parse_user_agent(), Any, Session, CRM 报价单分享访问日志 CRUD — 对照 CrmQuoteShareLogServiceImpl.java, 简易 User-Agent 解析(替代 Hutool UserAgentUtil), Java: queryLogsByQuoteId, record_visit() (+2 more) +Cohesion: 0.26 +Nodes (12): list_share_logs(), _parse_user_agent(), Any, Session, CRM 报价单分享访问日志 CRUD — 对照 CrmQuoteShareLogServiceImpl.java, Java: statisticsVisits, 简易 User-Agent 解析(替代 Hutool UserAgentUtil), Java: queryLogsByQuoteId (+4 more) ### Community 114 - "db_models.py" Cohesion: 0.24 @@ -568,8 +565,8 @@ Cohesion: 0.33 Nodes (8): allocate_next_biz_no(), _format_biz_no(), _prefix_for(), datetime, Session, 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, BizNoKind ### Community 116 - "Community 116" -Cohesion: 0.19 -Nodes (26): batch_insert_quote_products(), calculate_subtotal(), _decimal_value(), delete_products_by_quote_id(), _ensure_quote_parent_scope(), _get_field(), get_quote_product(), insert_quote_product() (+18 more) +Cohesion: 0.20 +Nodes (24): batch_insert_quote_products(), calculate_subtotal(), _decimal_value(), delete_products_by_quote_id(), _ensure_quote_parent_scope(), _get_field(), get_quote_product(), insert_quote_product() (+16 more) ### Community 118 - "Community 118" Cohesion: 0.22 @@ -584,36 +581,36 @@ Cohesion: 0.22 Nodes (15): get_storage(), download_file_bytes(), file_stream(), get_access_url(), get_download_url(), get_preview_url(), normalize_storage_path(), 报销附件存储适配 — 复用门户 app.core.storage,对外保持 bx 协议。 (+7 more) ### Community 125 - "Community 125" -Cohesion: 0.06 -Nodes (70): _build_page(), _get_by_token(), _models(), Session, 运输计划 · 入库/出库单现场免登录公共 API, PlInboundOrder, PlInboundOrderItem, PlInboundOrderItemBrandQty (+62 more) +Cohesion: 0.10 +Nodes (45): 按运输计划单据类型解析地磅往来单位(不区分 CRM 合同类型)。 - 入库单 inbound:供方 → party_a,其次 supplier_nam, resolve_partner_company(), apply_dibang_prefill_to_order(), apply_site_feedback(), build_io_order_site_url(), create_io_order_for_transport(), _dibang_qty_by_plan_product(), enrich_io_items_with_brand_feedback() (+37 more) ### Community 126 - "customer_pool.py" Cohesion: 0.52 Nodes (6): apply_updates(), collect_candidates(), main(), parse_name(), Path, write_csv() ### Community 127 - "Community 127" -Cohesion: 0.38 -Nodes (14): _cargo_stats(), get_dashboard_stats(), get_inbound_by_cargo(), get_inbound_by_partner_cargo(), get_outbound_by_cargo(), get_outbound_by_partner_cargo(), _partner_cargo_stats(), Session (+6 more) +Cohesion: 0.25 +Nodes (17): _cargo_stats(), get_dashboard_stats(), get_inbound_by_cargo(), get_inbound_by_partner_cargo(), get_outbound_by_cargo(), get_outbound_by_partner_cargo(), _partner_cargo_stats(), Session (+9 more) ### Community 128 - "plan.py" -Cohesion: 0.07 -Nodes (72): archive_plan(), cancel_plan(), cancel_plan_wait_notice(), count_plans_by_contract(), create_from_contract(), create_plan(), create_plan_full(), delete_plan() (+64 more) +Cohesion: 0.06 +Nodes (73): archive_plan(), _build_driver_url(), cancel_plan(), cancel_plan_wait_notice(), count_plans_by_contract(), create_from_contract(), create_plan(), create_plan_full() (+65 more) ### Community 129 - "BaseStorage" -Cohesion: 0.29 -Nodes (14): PlTransportDbLink, 运输-地磅出入库关联 pl_transport_db_link, _apply_plan_quantity_delta(), 再次勾选地磅安排前:软删本运输单此前生成的、仍可作废的出入库单及关联。 - 不删除地磅月计划(可能被其他业务复用) - 若出入库单已完成的/已, _resolve_link_contributed_qty(), revoke_regeneratable_dibang_for_transport(), _subtract_plan_contribution(), test_apply_plan_quantity_delta_accumulates() (+6 more) +Cohesion: 0.31 +Nodes (15): DbInboundOutbound, PlTransportDbLink, 运输-地磅出入库关联 pl_transport_db_link, _apply_plan_quantity_delta(), 再次勾选地磅安排前:软删本运输单此前生成的、仍可作废的出入库单及关联。 - 不删除地磅月计划(可能被其他业务复用) - 若出入库单已完成的/已, _resolve_link_contributed_qty(), revoke_regeneratable_dibang_for_transport(), _subtract_plan_contribution() (+7 more) ### Community 130 - "datetime_parse.py" Cohesion: 0.36 Nodes (15): create_opportunity_follow(), _ensure_parent_opportunity(), get_opportunity_follow(), list_follows_by_opportunity(), list_opportunity_follows(), _parse_optional_datetime(), Any, datetime (+7 more) ### Community 131 - "LocalStorage" -Cohesion: 0.16 -Nodes (28): get_personnel(), paste_recognize_commit(), PlPersonnel, PlVehiclePersonnel, 车辆-人员关联表 pl_vehicle_personnel, VehiclePersonnelRow, ConflictAction, PasteCommitBody (+20 more) +Cohesion: 0.18 +Nodes (23): paste_recognize_commit(), VehiclePersonnelRow, ConflictAction, PasteCommitBody, PasteCommitResult, PastePersonnelIn, PasteVehicleIn, 运输计划 - 三方粘贴识别提交 Schema (+15 more) ### Community 132 - "crm_supplier_hazard.py" -Cohesion: 0.14 -Nodes (23): build_updates(), derive_source_url(), fetch_source_customers(), legacy_id_to_str(), load_oss_map(), load_runtime_settings(), load_settings_env(), main() (+15 more) +Cohesion: 0.29 +Nodes (12): build_updates(), derive_source_url(), fetch_source_customers(), legacy_id_to_str(), load_oss_map(), load_runtime_settings(), load_settings_env(), main() (+4 more) ### Community 134 - "Community 134" Cohesion: 0.25 @@ -624,8 +621,8 @@ Cohesion: 0.24 Nodes (12): get_last_month_range(), month_range(), date, Session, 地磅计划按月自动生成 — 迁移自 simple-dibang-xiaoshou/auto-create-plan/auto_create_monthly_pla, 按月自动生成采购计划。 - 默认仅在每月 1 日执行(force=True 时跳过该限制,供手动触发验收) - 遍历所有租户,按上月计划模板生, run_auto_generate_monthly_plans(), default_execution_status() (+4 more) ### Community 136 - "Community 136" -Cohesion: 0.22 -Nodes (16): create_role(), get_role(), get_role_data_scope(), get_role_menu_ids(), list_roles(), Any, Session, 角色 CRUD(sys_role / sys_role_menu / sys_role_data_scope_detail) (+8 more) +Cohesion: 0.19 +Nodes (18): create_role(), get_role(), get_role_data_scope(), get_role_menu_ids(), list_roles(), Any, Session, 角色 CRUD(sys_role / sys_role_menu / sys_role_data_scope_detail) (+10 more) ### Community 137 - "statistics.py" Cohesion: 0.45 @@ -652,36 +649,36 @@ Cohesion: 0.17 Nodes (11): price_letter_add(), price_letter_detail(), price_letter_list(), price_letter_update(), price_letter_void(), PriceLetterCreateBody, PriceLetterDetailBody, PriceLetterListBody (+3 more) ### Community 145 - "minio_url.py" -Cohesion: 0.39 -Nodes (10): create_site(), get_site(), list_sites(), Any, Session, _row_to_dict(), site_code_exists(), soft_delete_site() (+2 more) +Cohesion: 0.24 +Nodes (13): normalize_attachment_csv(), normalize_attachment_csv(), extract_minio_object_key(), join_relative_urls(), normalize_oss_storage_url(), MinIO 附件 URL 规范化(数据迁移共用)。 背景 ---- CRM / 地磅 / 报销与 shanxia2.0 共用同一 MinIO(bucket 默, 业务表 OSS ID 串 → 相对 URL 串(用于客户证照、跟进附件等)。, 去掉预签名 query(``?X-Amz-...``)。 (+5 more) ### Community 146 - "__init__.py" -Cohesion: 0.16 -Nodes (28): _enrich_follow_dict(), get_follow(), list_follows(), list_follows_by_customer(), Any, Session, _row_to_dict(), soft_delete_follow() (+20 more) +Cohesion: 0.29 +Nodes (15): create_price_letter(), get_price_letter(), list_price_letters(), _parse_date(), Any, date, Session, _row_to_dict() (+7 more) ### Community 147 - "Community 147" Cohesion: 0.37 Nodes (17): check_env(), check_python(), create_venv(), init_env(), install_dependencies(), log_error(), log_info(), log_success() (+9 more) ### Community 150 - "ContractListQuery" -Cohesion: 0.09 -Nodes (35): CRM 合同 API 路由 — GET/PUT/DELETE/POST 对齐原 Java CRM, ContractApprovalActionBody, ContractApprovalPassBody, ContractApprovalRejectBody, ContractApprovalTransferBody, ContractBatchAssignBody, ContractBatchSubmitBody, ContractChangeCreateBody (+27 more) +Cohesion: 0.10 +Nodes (32): CRM 合同 API 路由 — GET/PUT/DELETE/POST 对齐原 Java CRM, 接口菜单权限守卫。super_admin 直接放行。, require_menu_code(), ContractApproverSettingSaveBody, ContractApprovalActionBody, ContractBatchAssignBody, ContractBatchSubmitBody, ContractChangeCreateBody (+24 more) ### Community 152 - "Community 152" Cohesion: 0.12 Nodes (16): 供方全量列表(下拉)— Java: CrmSupplierInfoController.listAll, 供方详情 — Java: CrmSupplierInfoController.getInfo, 新增供方 — Java: CrmSupplierInfoController.add, 修改供方 — Java: CrmSupplierInfoController.edit, 删除供方 — Java: CrmSupplierInfoController.remove, supplier_info_add(), supplier_info_delete(), supplier_info_detail() (+8 more) ### Community 154 - "web_login_rsa_public_key" -Cohesion: 0.08 -Nodes (44): generate_uuid(), get_current_time(), parse_datetime(), datetime, get_pool_record(), list_pool_records(), Any, Session (+36 more) +Cohesion: 0.10 +Nodes (27): get_current_time(), parse_datetime(), datetime, get_pool_record(), list_pool_records(), Any, Session, _row_to_dict() (+19 more) ### Community 156 - "get_client_ip" Cohesion: 0.27 -Nodes (11): customer_dealed(), customer_export(), customer_key(), customer_list(), customer_long_time_no_follow(), customer_mine(), customer_to_follow(), customer_week_new() (+3 more) +Nodes (11): create_dict_data(), get_dict_data(), list_dict_data(), list_dict_data_options(), Any, Session, 字典数据 CRUD(sys_dict_data), 字典下拉选项:租户主数据,忽略数据范围(user_info 保留兼容调用方,不参与过滤)。 (+3 more) ### Community 159 - "context.py" -Cohesion: 0.35 -Nodes (10): format_datetime(), datetime_end_of_day(), fmt_date(), fmt_datetime(), inventory_date_to_api(), is_empty_inventory_date(), _parse_site_feedback_images(), date (+2 more) +Cohesion: 0.48 +Nodes (7): _opp_list_kwargs(), opportunity_export(), opportunity_kanban(), opportunity_list(), opportunity_mine_list(), OpportunityKanbanBody, OpportunityListBody ### Community 160 - "register_local_callback" Cohesion: 0.60 @@ -699,29 +696,21 @@ Nodes (3): BaseStorage, 带下载文件名的访问 URL;默认实现为普通 Cohesion: 0.31 Nodes (9): decrypt_login_payload(), ensure_initialized(), extract_login_credentials(), get_public_pem(), Any, 登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。, Base64 密文 -> JSON 对象(须含 username、password、ts 毫秒时间戳)。, 从请求体解析用户名、密码。 返回 (username, password, error_message);error_message 非空时表示失败。 (+1 more) -### Community 164 - "apply_pl_scope" -Cohesion: 0.38 -Nodes (11): apply_pl_scope(), Session, PL 模块数据权限辅助(create_by / create_dept_id,无 owner_field)。, build_menu_badge_counts(), count_document_reminder_expired_pending(), count_freight_approval_pending(), count_freight_disburse_pending(), _count_pending_applies() (+3 more) - ### Community 170 - "test_quote_approver_setting.py" -Cohesion: 0.28 -Nodes (14): _assert_users_exist(), get_setting(), join_approver_ids(), parse_approver_ids(), prefill_approver_ids(), Any, Session, 返回可预填的审批人 ID 列表;不可用则空列表。 (+6 more) +Cohesion: 0.20 +Nodes (21): _assert_users_exist(), get_setting(), Any, Session, _row_to_dict(), save_setting(), _assert_users_exist(), get_setting() (+13 more) ### Community 172 - "MinIOStorage" Cohesion: 0.32 Nodes (3): MinIOStorage, MinIO 预签名下载 URL,携带原始文件名。, MinIO 预签名内联预览 URL(PDF 等 iframe 场景)。 -### Community 173 - "SysEthnic" -Cohesion: 0.50 -Nodes (5): assert_products_allowed_for_supplier(), enrich_products_with_hazard_flags(), Any, Session, 批量回填明细行 isToxic/isExplosive(来自产品主数据,供前端切换主体剔除)。 - ### Community 174 - "datetime_parse.py" Cohesion: 0.67 Nodes (3): parse_optional_plan_datetime(), datetime, 运输计划相关日期时间解析:前端 date-picker 仅传 YYYY-MM-DD。 ### Community 180 - "menu.py" Cohesion: 0.36 -Nodes (12): _build_tree(), _cascade_soft_delete(), create_menu(), get_menu(), list_menus(), list_menus_tree(), menu_name_exists(), Any (+4 more) +Nodes (13): _build_tree(), _cascade_soft_delete(), create_menu(), get_menu(), list_menus(), list_menus_tree(), menu_name_exists(), Any (+5 more) ### Community 206 - "crm_quote_pdf.py" Cohesion: 0.36 @@ -732,8 +721,8 @@ Cohesion: 0.18 Nodes (10): 1. 创建虚拟环境, 2. 安装依赖, 3. 配置环境变量, 4. 启动服务, API 路由分组, shanxia2.0 后端骨架(FastAPI), 开发规范, 快速开始 (+2 more) ### Community 220 - "api_crypto_middleware.py" -Cohesion: 0.13 -Nodes (22): ApiCryptoMiddleware, _claims_from_auth(), _coerce_post_method_override_to_get(), _get_redis_client(), _is_crypto_api(), _json_error_response(), _mark_nonce_once(), _nonce_key() (+14 more) +Cohesion: 0.12 +Nodes (24): ApiCryptoMiddleware, _claims_from_auth(), _coerce_post_method_override_to_get(), _get_redis_client(), _is_crypto_api(), _json_error_response(), _mark_nonce_once(), _nonce_key() (+16 more) ### Community 237 - "order_status_compat.py" Cohesion: 0.36 @@ -750,22 +739,22 @@ Nodes (6): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时 ## Knowledge Gaps - **30 isolated node(s):** `Config`, `Config`, `Config`, `Config`, `Config` (+25 more) These have ≤1 connection - possible missing edges or undocumented components. -- **17 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **16 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `generate_uuid()` connect `web_login_rsa_public_key` to `plan.py`, `datetime_parse.py`, `LocalStorage`, `Community 4`, `Community 134`, `post.py`, `Community 8`, `Community 136`, `Community 6`, `Community 11`, `Community 7`, `Community 13`, `Community 14`, `SysEthnic`, `Community 15`, `minio_url.py`, `__init__.py`, `Community 19`, `Community 18`, `Community 21`, `Community 16`, `Community 24`, `Community 25`, `Community 27`, `Community 28`, `Community 29`, `Community 34`, `Community 37`, `Community 38`, `Community 39`, `test_quote_approver_setting.py`, `Community 43`, `Community 45`, `Community 46`, `Community 51`, `menu.py`, `Community 53`, `Community 61`, `Community 65`, `Community 66`, `Community 70`, `Community 74`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `response.py`, `Community 95`, `_ensure_subpack_slip_no`, `dept.py`, `Community 109`, `storage.py`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 125`, `customer_pool.py`?** - _High betweenness centrality (0.129) - this node is a cross-community bridge._ +- **Why does `generate_uuid()` connect `Community 38` to `plan.py`, `datetime_parse.py`, `LocalStorage`, `Community 4`, `Community 134`, `post.py`, `Community 8`, `Community 136`, `Community 6`, `Community 11`, `Community 7`, `Community 13`, `Community 14`, `SysEthnic`, `Community 15`, `Community 16`, `__init__.py`, `Community 19`, `Community 18`, `Community 21`, `Community 25`, `Community 26`, `web_login_rsa_public_key`, `Community 27`, `get_client_ip`, `Community 30`, `Community 28`, `Community 29`, `Community 34`, `Community 39`, `test_quote_approver_setting.py`, `Community 43`, `Community 51`, `menu.py`, `Community 53`, `Community 61`, `Community 65`, `Community 66`, `Community 67`, `Community 68`, `Community 70`, `Community 74`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `response.py`, `Community 95`, `_ensure_subpack_slip_no`, `dept.py`, `Community 109`, `storage.py`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 125`, `customer_pool.py`?** + _High betweenness centrality (0.121) - this node is a cross-community bridge._ - **Why does `Settings` connect `price_letter_detail` to `backfill_crm_contract_attachment_urls.py`, `Community 35`, `crm_supplier_hazard.py`, `Community 5`, `Community 7`, `Community 72`, `Community 73`, `Community 42`, `Community 78`, `Community 52`, `Any`, `Community 59`, `api_crypto_middleware.py`, `Community 62`?** - _High betweenness centrality (0.110) - this node is a cross-community bridge._ -- **Why does `BaseModel` connect `Community 12` to `plan.py`, `Community 1`, `Community 3`, `LocalStorage`, `Community 6`, `Community 11`, `Community 14`, `Community 15`, `SysApiRequestLog`, `Community 16`, `Community 18`, `ContractListQuery`, `Community 24`, `Community 25`, `Community 152`, `Community 27`, `get_client_ip`, `Community 30`, `Community 33`, `Community 43`, `Community 45`, `Community 46`, `Community 48`, `Community 49`, `Community 50`, `Community 54`, `Community 58`, `Community 60`, `Community 63`, `Community 64`, `Community 65`, `Community 66`, `Community 67`, `Community 71`, `Community 81`, `Community 86`, `_ensure_subpack_slip_no`, `list_customers`, `Community 106`, `apply_pl_scope`, `Community 109`, `Community 111`, `Community 119`, `Community 125`, `Community 127`?** - _High betweenness centrality (0.092) - this node is a cross-community bridge._ + _High betweenness centrality (0.111) - this node is a cross-community bridge._ +- **Why does `BaseModel` connect `Community 12` to `plan.py`, `Community 1`, `Community 3`, `LocalStorage`, `Community 6`, `Community 11`, `Community 14`, `Community 15`, `SysApiRequestLog`, `Community 16`, `Community 18`, `ContractListQuery`, `Community 152`, `Community 25`, `Community 27`, `Community 30`, `context.py`, `Community 33`, `Community 36`, `Community 43`, `Community 48`, `Community 49`, `Community 50`, `Community 54`, `Community 58`, `Community 60`, `Community 63`, `Community 64`, `Community 65`, `Community 66`, `Community 71`, `Community 83`, `Community 86`, `_ensure_subpack_slip_no`, `list_customers`, `Community 106`, `apply_pl_scope`, `Community 109`, `Community 111`, `Community 119`, `Community 127`?** + _High betweenness centrality (0.093) - this node is a cross-community bridge._ - **Are the 8 inferred relationships involving `DbUserContext` (e.g. with `InventoryRelatedData` and `AutoGenerateMonthlyResult`) actually correct?** _`DbUserContext` has 8 INFERRED edges - model-reasoned connections that need verification._ - **What connects `API 路由包 — 山峡化工生产一体化门户`, `返回运营端角色下拉选项(label=库中角色名,value=Web 角色码)。`, `返回用户下拉选项(label=昵称,value=用户ID,附带 nickName/userNo)。 供申请人/审批人等选择场景使用,返回本租户全部有效` to the rest of the system?** _493 weakly-connected nodes found - possible documentation gaps or missing edges._ -- **Should `Community 0` be split into smaller, more focused modules?** - _Cohesion score 0.10409745293466224 - nodes in this community are weakly interconnected._ - **Should `Community 1` be split into smaller, more focused modules?** - _Cohesion score 0.14919354838709678 - nodes in this community are weakly interconnected._ \ No newline at end of file + _Cohesion score 0.1251778093883357 - nodes in this community are weakly interconnected._ +- **Should `Community 3` be split into smaller, more focused modules?** + _Cohesion score 0.07668413900213551 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/backend/graphify-out/2026-08-01/graph.json b/backend/graphify-out/2026-08-01/graph.json index 7ab335471..1ae2972d5 100644 --- a/backend/graphify-out/2026-08-01/graph.json +++ b/backend/graphify-out/2026-08-01/graph.json @@ -20,7 +20,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_init", - "community": 81, + "community": 36, "norm_label": "__init__.py" }, { @@ -30,7 +30,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_init_rationale_1", - "community": 81, + "community": 36, "norm_label": "api \u8def\u7531\u5305 \u2014 \u5c71\u5ce1\u5316\u5de5\u751f\u4ea7\u4e00\u4f53\u5316\u95e8\u6237" }, { @@ -1910,7 +1910,7 @@ "source_location": "L356", "_origin": "ast", "id": "app_api_crm_customer_list", - "community": 156, + "community": 64, "norm_label": "customer_list()" }, { @@ -2150,7 +2150,7 @@ "source_location": "L1029", "_origin": "ast", "id": "app_api_crm_customer_export", - "community": 156, + "community": 64, "norm_label": "customer_export()" }, { @@ -2170,7 +2170,7 @@ "source_location": "L1104", "_origin": "ast", "id": "app_api_crm_customer_mine", - "community": 156, + "community": 64, "norm_label": "customer_mine()" }, { @@ -2180,7 +2180,7 @@ "source_location": "L1138", "_origin": "ast", "id": "app_api_crm_customer_to_follow", - "community": 156, + "community": 64, "norm_label": "customer_to_follow()" }, { @@ -2190,7 +2190,7 @@ "source_location": "L1172", "_origin": "ast", "id": "app_api_crm_customer_key", - "community": 156, + "community": 64, "norm_label": "customer_key()" }, { @@ -2200,7 +2200,7 @@ "source_location": "L1206", "_origin": "ast", "id": "app_api_crm_customer_dealed", - "community": 156, + "community": 64, "norm_label": "customer_dealed()" }, { @@ -2210,7 +2210,7 @@ "source_location": "L1238", "_origin": "ast", "id": "app_api_crm_customer_week_new", - "community": 156, + "community": 64, "norm_label": "customer_week_new()" }, { @@ -2220,7 +2220,7 @@ "source_location": "L1270", "_origin": "ast", "id": "app_api_crm_customer_long_time_no_follow", - "community": 156, + "community": 64, "norm_label": "customer_long_time_no_follow()" }, { @@ -2240,7 +2240,7 @@ "source_location": "L1322", "_origin": "ast", "id": "app_api_crm_pool_customer_list", - "community": 64, + "community": 12, "norm_label": "pool_customer_list()" }, { @@ -2250,7 +2250,7 @@ "source_location": "L1354", "_origin": "ast", "id": "app_api_crm_pool_customer_assign", - "community": 64, + "community": 12, "norm_label": "pool_customer_assign()" }, { @@ -2260,7 +2260,7 @@ "source_location": "L1373", "_origin": "ast", "id": "app_api_crm_pool_customer_claim", - "community": 64, + "community": 12, "norm_label": "pool_customer_claim()" }, { @@ -2270,7 +2270,7 @@ "source_location": "L1391", "_origin": "ast", "id": "app_api_crm_pool_record_list", - "community": 64, + "community": 12, "norm_label": "pool_record_list()" }, { @@ -2280,7 +2280,7 @@ "source_location": "L1421", "_origin": "ast", "id": "app_api_crm_pool_record_detail", - "community": 64, + "community": 12, "norm_label": "pool_record_detail()" }, { @@ -2650,7 +2650,7 @@ "source_location": "L2212", "_origin": "ast", "id": "app_api_crm_opp_list_kwargs", - "community": 64, + "community": 159, "norm_label": "_opp_list_kwargs()" }, { @@ -2660,7 +2660,7 @@ "source_location": "L2241", "_origin": "ast", "id": "app_api_crm_opportunity_list", - "community": 64, + "community": 159, "norm_label": "opportunity_list()" }, { @@ -2670,7 +2670,7 @@ "source_location": "L2274", "_origin": "ast", "id": "app_api_crm_opportunity_mine_list", - "community": 64, + "community": 159, "norm_label": "opportunity_mine_list()" }, { @@ -2790,7 +2790,7 @@ "source_location": "L2592", "_origin": "ast", "id": "app_api_crm_opportunity_kanban", - "community": 64, + "community": 159, "norm_label": "opportunity_kanban()" }, { @@ -2970,7 +2970,7 @@ "source_location": "L3039", "_origin": "ast", "id": "app_api_crm_opportunity_export", - "community": 64, + "community": 159, "norm_label": "opportunity_export()" }, { @@ -3050,7 +3050,7 @@ "source_location": "L3284", "_origin": "ast", "id": "app_api_crm_invoice_info_by_customer_impl", - "community": 64, + "community": 107, "norm_label": "_invoice_info_by_customer_impl()" }, { @@ -3060,7 +3060,7 @@ "source_location": "L3298", "_origin": "ast", "id": "app_api_crm_invoice_info_list", - "community": 64, + "community": 107, "norm_label": "invoice_info_list()" }, { @@ -3070,7 +3070,7 @@ "source_location": "L3313", "_origin": "ast", "id": "app_api_crm_invoice_info_by_customer", - "community": 64, + "community": 107, "norm_label": "invoice_info_by_customer()" }, { @@ -3080,7 +3080,7 @@ "source_location": "L3328", "_origin": "ast", "id": "app_api_crm_invoice_info_add", - "community": 64, + "community": 107, "norm_label": "invoice_info_add()" }, { @@ -3090,7 +3090,7 @@ "source_location": "L3353", "_origin": "ast", "id": "app_api_crm_invoice_info_update", - "community": 64, + "community": 107, "norm_label": "invoice_info_update()" }, { @@ -3100,7 +3100,7 @@ "source_location": "L3381", "_origin": "ast", "id": "app_api_crm_invoice_info_delete", - "community": 64, + "community": 107, "norm_label": "invoice_info_delete()" }, { @@ -3110,7 +3110,7 @@ "source_location": "L3404", "_origin": "ast", "id": "app_api_crm_invoice_info_set_default", - "community": 64, + "community": 107, "norm_label": "invoice_info_set_default()" }, { @@ -3140,7 +3140,7 @@ "source_location": "L3506", "_origin": "ast", "id": "app_api_crm_clue_create", - "community": 67, + "community": 64, "norm_label": "clue_create()" }, { @@ -3150,7 +3150,7 @@ "source_location": "L3529", "_origin": "ast", "id": "app_api_crm_clue_update", - "community": 67, + "community": 64, "norm_label": "clue_update()" }, { @@ -3160,7 +3160,7 @@ "source_location": "L3551", "_origin": "ast", "id": "app_api_crm_clue_delete", - "community": 67, + "community": 64, "norm_label": "clue_delete()" }, { @@ -3170,7 +3170,7 @@ "source_location": "L3582", "_origin": "ast", "id": "app_api_crm_clue_assign", - "community": 67, + "community": 64, "norm_label": "clue_assign()" }, { @@ -3180,7 +3180,7 @@ "source_location": "L3610", "_origin": "ast", "id": "app_api_crm_clue_convert", - "community": 67, + "community": 64, "norm_label": "clue_convert()" }, { @@ -3200,7 +3200,7 @@ "source_location": "L3658", "_origin": "ast", "id": "app_api_crm_clue_update_status", - "community": 67, + "community": 64, "norm_label": "clue_update_status()" }, { @@ -3210,7 +3210,7 @@ "source_location": "L3679", "_origin": "ast", "id": "app_api_crm_clue_invalid", - "community": 67, + "community": 64, "norm_label": "clue_invalid()" }, { @@ -3220,7 +3220,7 @@ "source_location": "L3710", "_origin": "ast", "id": "app_api_crm_clue_update_level", - "community": 67, + "community": 64, "norm_label": "clue_update_level()" }, { @@ -3270,7 +3270,7 @@ "source_location": "L3884", "_origin": "ast", "id": "app_api_crm_clue_follow_list", - "community": 67, + "community": 64, "norm_label": "clue_follow_list()" }, { @@ -3280,7 +3280,7 @@ "source_location": "L3916", "_origin": "ast", "id": "app_api_crm_clue_follow_create", - "community": 67, + "community": 64, "norm_label": "clue_follow_create()" }, { @@ -3290,7 +3290,7 @@ "source_location": "L3948", "_origin": "ast", "id": "app_api_crm_clue_follow_delete", - "community": 67, + "community": 64, "norm_label": "clue_follow_delete()" }, { @@ -3360,7 +3360,7 @@ "source_location": "L4240", "_origin": "ast", "id": "app_api_crm_clue_follow_update", - "community": 67, + "community": 64, "norm_label": "clue_follow_update()" }, { @@ -3560,7 +3560,7 @@ "source_location": "L3303", "_origin": "ast", "id": "app_api_crm_rationale_3303", - "community": 64, + "community": 107, "norm_label": "\u6309\u5ba2\u6237id\u67e5\u8be2\u5f00\u7968\u4fe1\u606f(\u4e0e by-customer \u7b49\u4ef7)" }, { @@ -3577,7 +3577,7 @@ "label": "register_contract_routes()", "file_type": "code", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L75", + "source_location": "L78", "_origin": "ast", "id": "app_api_crm_contract_routes_register_contract_routes", "community": 26, @@ -3600,7 +3600,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_crm_contract_sub_routes", - "community": 24, + "community": 83, "norm_label": "crm_contract_sub_routes.py" }, { @@ -3610,7 +3610,7 @@ "source_location": "L68", "_origin": "ast", "id": "app_api_crm_contract_sub_routes_register_contract_sub_routes", - "community": 24, + "community": 83, "norm_label": "register_contract_sub_routes()" }, { @@ -3620,7 +3620,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_crm_contract_sub_routes_rationale_1", - "community": 24, + "community": 83, "norm_label": "crm \u5408\u540c\u5b50\u6a21\u5757\u8def\u7531 \u2014 \u53d8\u66f4/\u6a21\u677f/\u5ba1\u6279\u72ec\u7acb\u9875" }, { @@ -3660,7 +3660,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_db_init", - "community": 179, + "community": 127, "norm_label": "__init__.py" }, { @@ -3670,7 +3670,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_api_db_init_db_health", - "community": 179, + "community": 127, "norm_label": "db_health()" }, { @@ -3680,7 +3680,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_db_init_rationale_1", - "community": 179, + "community": 127, "norm_label": "\u5730\u78c5 api \u8def\u7531\u805a\u5408 \u2014 rest \u98ce\u683c,\u534f\u8bae\u5bf9\u9f50\u539f simple-dibang-xiaoshou\u3002" }, { @@ -4560,7 +4560,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_menu", - "community": 81, + "community": 36, "norm_label": "menu.py" }, { @@ -4570,7 +4570,7 @@ "source_location": "L695", "_origin": "ast", "id": "app_api_menu_get_menu_list", - "community": 81, + "community": 36, "norm_label": "get_menu_list()" }, { @@ -4580,7 +4580,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_menu_rationale_1", - "community": 81, + "community": 36, "norm_label": "\u8fd0\u8425\u7aef\u83dc\u5355\u63a5\u53e3(\u4e0e web-admin \u524d\u7aef\u9759\u6001\u8def\u7531 sqxp.ts \u5bf9\u9f50,14 \u4e2a\u4e00\u7ea7\u83dc\u5355)" }, { @@ -4770,7 +4770,7 @@ "source_location": "L275", "_origin": "ast", "id": "app_api_pl_base_data_list_vehicles", - "community": 45, + "community": 97, "norm_label": "list_vehicles()" }, { @@ -4820,7 +4820,7 @@ "source_location": "L574", "_origin": "ast", "id": "app_api_pl_base_data_personnel_to_read", - "community": 45, + "community": 97, "norm_label": "_personnel_to_read()" }, { @@ -4830,7 +4830,7 @@ "source_location": "L589", "_origin": "ast", "id": "app_api_pl_base_data_personnel_to_detail", - "community": 45, + "community": 97, "norm_label": "_personnel_to_detail()" }, { @@ -4840,7 +4840,7 @@ "source_location": "L603", "_origin": "ast", "id": "app_api_pl_base_data_list_personnel", - "community": 45, + "community": 97, "norm_label": "list_personnel()" }, { @@ -4850,7 +4850,7 @@ "source_location": "L659", "_origin": "ast", "id": "app_api_pl_base_data_create_personnel", - "community": 45, + "community": 97, "norm_label": "create_personnel()" }, { @@ -4860,7 +4860,7 @@ "source_location": "L710", "_origin": "ast", "id": "app_api_pl_base_data_get_personnel", - "community": 131, + "community": 97, "norm_label": "get_personnel()" }, { @@ -4870,7 +4870,7 @@ "source_location": "L721", "_origin": "ast", "id": "app_api_pl_base_data_update_personnel", - "community": 45, + "community": 97, "norm_label": "update_personnel()" }, { @@ -5700,7 +5700,7 @@ "source_location": "L212", "_origin": "ast", "id": "app_api_pl_plan_generate_notify_message", - "community": 6, + "community": 128, "norm_label": "_generate_notify_message()" }, { @@ -5800,7 +5800,7 @@ "source_location": "L961", "_origin": "ast", "id": "app_api_pl_plan_build_driver_url", - "community": 25, + "community": 128, "norm_label": "_build_driver_url()" }, { @@ -5940,7 +5940,7 @@ "source_location": "L1485", "_origin": "ast", "id": "app_api_pl_plan_delete_plan", - "community": 128, + "community": 97, "norm_label": "delete_plan()" }, { @@ -6020,7 +6020,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_pl_public_io_order", - "community": 125, + "community": 49, "norm_label": "public_io_order.py" }, { @@ -6030,7 +6030,7 @@ "source_location": "L31", "_origin": "ast", "id": "app_api_pl_public_io_order_models", - "community": 125, + "community": 49, "norm_label": "_models()" }, { @@ -6040,7 +6040,7 @@ "source_location": "L37", "_origin": "ast", "id": "app_api_pl_public_io_order_get_by_token", - "community": 125, + "community": 49, "norm_label": "_get_by_token()" }, { @@ -6050,7 +6050,7 @@ "source_location": "", "_origin": "ast", "id": "app_api_pl_public_io_order_py_session", - "community": 125, + "community": 49, "norm_label": "session" }, { @@ -6060,7 +6060,7 @@ "source_location": "L55", "_origin": "ast", "id": "app_api_pl_public_io_order_build_page", - "community": 125, + "community": 49, "norm_label": "_build_page()" }, { @@ -6070,7 +6070,7 @@ "source_location": "L66", "_origin": "ast", "id": "app_api_pl_public_io_order_format_file_size", - "community": 125, + "community": 49, "norm_label": "_format_file_size()" }, { @@ -6090,7 +6090,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_pl_public_io_order_rationale_1", - "community": 125, + "community": 49, "norm_label": "\u8fd0\u8f93\u8ba1\u5212 \u00b7 \u5165\u5e93/\u51fa\u5e93\u5355\u73b0\u573a\u514d\u767b\u5f55\u516c\u5171 api" }, { @@ -6100,7 +6100,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_pl_public_site", - "community": 0, + "community": 29, "norm_label": "public_site.py" }, { @@ -6110,7 +6110,7 @@ "source_location": "L33", "_origin": "ast", "id": "app_api_pl_public_site_parse_feedback_images", - "community": 0, + "community": 29, "norm_label": "_parse_feedback_images()" }, { @@ -6120,7 +6120,7 @@ "source_location": "L45", "_origin": "ast", "id": "app_api_pl_public_site_get_site_link_by_token", - "community": 0, + "community": 29, "norm_label": "_get_site_link_by_token()" }, { @@ -6130,7 +6130,7 @@ "source_location": "", "_origin": "ast", "id": "app_api_pl_public_site_py_session", - "community": 0, + "community": 29, "norm_label": "session" }, { @@ -6140,7 +6140,7 @@ "source_location": "L59", "_origin": "ast", "id": "app_api_pl_public_site_resolve_plan_voided", - "community": 0, + "community": 29, "norm_label": "_resolve_plan_voided()" }, { @@ -6150,7 +6150,7 @@ "source_location": "L64", "_origin": "ast", "id": "app_api_pl_public_site_resolve_unit_label", - "community": 0, + "community": 29, "norm_label": "_resolve_unit_label()" }, { @@ -6160,7 +6160,7 @@ "source_location": "L71", "_origin": "ast", "id": "app_api_pl_public_site_resolve_plan_product", - "community": 0, + "community": 29, "norm_label": "_resolve_plan_product()" }, { @@ -6170,7 +6170,7 @@ "source_location": "L84", "_origin": "ast", "id": "app_api_pl_public_site_build_site_product_read", - "community": 0, + "community": 29, "norm_label": "_build_site_product_read()" }, { @@ -6180,7 +6180,7 @@ "source_location": "L143", "_origin": "ast", "id": "app_api_pl_public_site_build_public_page", - "community": 0, + "community": 29, "norm_label": "_build_public_page()" }, { @@ -6190,7 +6190,7 @@ "source_location": "L182", "_origin": "ast", "id": "app_api_pl_public_site_get_public_site", - "community": 0, + "community": 29, "norm_label": "get_public_site()" }, { @@ -6200,7 +6200,7 @@ "source_location": "L189", "_origin": "ast", "id": "app_api_pl_public_site_save_public_site_feedback", - "community": 0, + "community": 29, "norm_label": "save_public_site_feedback()" }, { @@ -6210,7 +6210,7 @@ "source_location": "L210", "_origin": "ast", "id": "app_api_pl_public_site_format_file_size", - "community": 0, + "community": 29, "norm_label": "_format_file_size()" }, { @@ -6220,7 +6220,7 @@ "source_location": "L219", "_origin": "ast", "id": "app_api_pl_public_site_upload_public_site_attachment", - "community": 0, + "community": 29, "norm_label": "upload_public_site_attachment()" }, { @@ -6230,7 +6230,7 @@ "source_location": "", "_origin": "ast", "id": "app_api_pl_public_site_py_uploadfile", - "community": 0, + "community": 29, "norm_label": "uploadfile" }, { @@ -6240,7 +6240,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_pl_public_site_rationale_1", - "community": 0, + "community": 29, "norm_label": "\u8fd0\u8f93\u8ba1\u5212 \u00b7 \u5de5\u5382\u73b0\u573a\u4eba\u5458\u514d\u767b\u5f55\u516c\u5171 api(pl_transport_site_link)" }, { @@ -6580,7 +6580,7 @@ "source_location": "L788", "_origin": "ast", "id": "app_api_pl_transport_qrcoderesponse", - "community": 25, + "community": 49, "norm_label": "qrcoderesponse" }, { @@ -6660,7 +6660,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_pl_transport_address", - "community": 46, + "community": 30, "norm_label": "transport_address.py" }, { @@ -6670,7 +6670,7 @@ "source_location": "L24", "_origin": "ast", "id": "app_api_pl_transport_address_address_to_read", - "community": 46, + "community": 30, "norm_label": "_address_to_read()" }, { @@ -6680,7 +6680,7 @@ "source_location": "L28", "_origin": "ast", "id": "app_api_pl_transport_address_get_address", - "community": 46, + "community": 30, "norm_label": "_get_address()" }, { @@ -6690,7 +6690,7 @@ "source_location": "", "_origin": "ast", "id": "app_api_pl_transport_address_py_session", - "community": 46, + "community": 30, "norm_label": "session" }, { @@ -6700,7 +6700,7 @@ "source_location": "L45", "_origin": "ast", "id": "app_api_pl_transport_address_build_address_query", - "community": 46, + "community": 30, "norm_label": "_build_address_query()" }, { @@ -6710,7 +6710,7 @@ "source_location": "L56", "_origin": "ast", "id": "app_api_pl_transport_address_list_transport_addresses", - "community": 46, + "community": 30, "norm_label": "list_transport_addresses()" }, { @@ -6720,7 +6720,7 @@ "source_location": "L96", "_origin": "ast", "id": "app_api_pl_transport_address_list_all_transport_addresses", - "community": 46, + "community": 30, "norm_label": "list_all_transport_addresses()" }, { @@ -6730,7 +6730,7 @@ "source_location": "L123", "_origin": "ast", "id": "app_api_pl_transport_address_create_transport_address", - "community": 46, + "community": 30, "norm_label": "create_transport_address()" }, { @@ -6740,7 +6740,7 @@ "source_location": "L150", "_origin": "ast", "id": "app_api_pl_transport_address_get_transport_address", - "community": 46, + "community": 30, "norm_label": "get_transport_address()" }, { @@ -6750,7 +6750,7 @@ "source_location": "L161", "_origin": "ast", "id": "app_api_pl_transport_address_update_transport_address", - "community": 46, + "community": 30, "norm_label": "update_transport_address()" }, { @@ -6760,7 +6760,7 @@ "source_location": "L182", "_origin": "ast", "id": "app_api_pl_transport_address_delete_transport_address", - "community": 46, + "community": 30, "norm_label": "delete_transport_address()" }, { @@ -7080,7 +7080,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_api_pl_vehicle_urea", - "community": 107, + "community": 11, "norm_label": "vehicle_urea.py" }, { @@ -7090,7 +7090,7 @@ "source_location": "L28", "_origin": "ast", "id": "app_api_pl_vehicle_urea_list_applies", - "community": 107, + "community": 11, "norm_label": "list_applies()" }, { @@ -7100,7 +7100,7 @@ "source_location": "", "_origin": "ast", "id": "app_api_pl_vehicle_urea_py_date", - "community": 107, + "community": 11, "norm_label": "date" }, { @@ -7110,7 +7110,7 @@ "source_location": "", "_origin": "ast", "id": "app_api_pl_vehicle_urea_py_session", - "community": 107, + "community": 11, "norm_label": "session" }, { @@ -7120,7 +7120,7 @@ "source_location": "L58", "_origin": "ast", "id": "app_api_pl_vehicle_urea_get_apply", - "community": 107, + "community": 11, "norm_label": "get_apply()" }, { @@ -7130,7 +7130,7 @@ "source_location": "L68", "_origin": "ast", "id": "app_api_pl_vehicle_urea_create_apply", - "community": 107, + "community": 11, "norm_label": "create_apply()" }, { @@ -7140,7 +7140,7 @@ "source_location": "L78", "_origin": "ast", "id": "app_api_pl_vehicle_urea_update_apply", - "community": 107, + "community": 11, "norm_label": "update_apply()" }, { @@ -7150,7 +7150,7 @@ "source_location": "L89", "_origin": "ast", "id": "app_api_pl_vehicle_urea_cancel_apply", - "community": 107, + "community": 11, "norm_label": "cancel_apply()" }, { @@ -7160,7 +7160,7 @@ "source_location": "L99", "_origin": "ast", "id": "app_api_pl_vehicle_urea_delete_applies", - "community": 107, + "community": 11, "norm_label": "delete_applies()" }, { @@ -7170,7 +7170,7 @@ "source_location": "L110", "_origin": "ast", "id": "app_api_pl_vehicle_urea_list_disburse_board", - "community": 107, + "community": 11, "norm_label": "list_disburse_board()" }, { @@ -7180,7 +7180,7 @@ "source_location": "L142", "_origin": "ast", "id": "app_api_pl_vehicle_urea_get_disburse", - "community": 107, + "community": 11, "norm_label": "get_disburse()" }, { @@ -7190,7 +7190,7 @@ "source_location": "L152", "_origin": "ast", "id": "app_api_pl_vehicle_urea_create_disburse", - "community": 107, + "community": 11, "norm_label": "create_disburse()" }, { @@ -7200,7 +7200,7 @@ "source_location": "L162", "_origin": "ast", "id": "app_api_pl_vehicle_urea_update_disburse", - "community": 107, + "community": 11, "norm_label": "update_disburse()" }, { @@ -7210,7 +7210,7 @@ "source_location": "L173", "_origin": "ast", "id": "app_api_pl_vehicle_urea_delete_disburses", - "community": 107, + "community": 11, "norm_label": "delete_disburses()" }, { @@ -7590,7 +7590,7 @@ "source_location": "L159", "_origin": "ast", "id": "app_api_workflow_taskactionbody", - "community": 1, + "community": 36, "norm_label": "taskactionbody" }, { @@ -7630,7 +7630,7 @@ "source_location": "L241", "_origin": "ast", "id": "app_api_workflow_delete_process_def", - "community": 3, + "community": 36, "norm_label": "delete_process_def()" }, { @@ -7750,7 +7750,7 @@ "source_location": "L160", "_origin": "ast", "id": "app_api_workflow_rationale_160", - "community": 1, + "community": 36, "norm_label": "\u5ba1\u6279\u610f\u89c1:\u524d\u7aef\u4f20 commenttext,\u517c\u5bb9 comment\u3002" }, { @@ -8110,7 +8110,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_api_request_log_middleware", - "community": 58, + "community": 45, "norm_label": "api_request_log_middleware.py" }, { @@ -8120,7 +8120,7 @@ "source_location": "L37", "_origin": "ast", "id": "app_core_api_request_log_middleware_truncate", - "community": 58, + "community": 45, "norm_label": "_truncate()" }, { @@ -8130,7 +8130,7 @@ "source_location": "L49", "_origin": "ast", "id": "app_core_api_request_log_middleware_truncate_utf8_bytes", - "community": 58, + "community": 45, "norm_label": "_truncate_utf8_bytes()" }, { @@ -8140,7 +8140,7 @@ "source_location": "L65", "_origin": "ast", "id": "app_core_api_request_log_middleware_redact_obj", - "community": 58, + "community": 45, "norm_label": "_redact_obj()" }, { @@ -8150,7 +8150,7 @@ "source_location": "", "_origin": "ast", "id": "app_core_api_request_log_middleware_py_any", - "community": 58, + "community": 45, "norm_label": "any" }, { @@ -8160,7 +8160,7 @@ "source_location": "L84", "_origin": "ast", "id": "app_core_api_request_log_middleware_format_body_bytes", - "community": 58, + "community": 45, "norm_label": "_format_body_bytes()" }, { @@ -8170,7 +8170,7 @@ "source_location": "L111", "_origin": "ast", "id": "app_core_api_request_log_middleware_claims_from_auth", - "community": 58, + "community": 45, "norm_label": "_claims_from_auth()" }, { @@ -8180,7 +8180,7 @@ "source_location": "L137", "_origin": "ast", "id": "app_core_api_request_log_middleware_should_skip_exclude", - "community": 58, + "community": 45, "norm_label": "_should_skip_exclude()" }, { @@ -8190,7 +8190,7 @@ "source_location": "L150", "_origin": "ast", "id": "app_core_api_request_log_middleware_should_skip", - "community": 58, + "community": 45, "norm_label": "_should_skip()" }, { @@ -8200,7 +8200,7 @@ "source_location": "", "_origin": "ast", "id": "app_core_api_request_log_middleware_py_request", - "community": 58, + "community": 45, "norm_label": "request" }, { @@ -8210,7 +8210,7 @@ "source_location": "L163", "_origin": "ast", "id": "app_core_api_request_log_middleware_persist_log", - "community": 58, + "community": 45, "norm_label": "_persist_log()" }, { @@ -8220,7 +8220,7 @@ "source_location": "L224", "_origin": "ast", "id": "app_core_api_request_log_middleware_schedule_persist_log", - "community": 58, + "community": 45, "norm_label": "_schedule_persist_log()" }, { @@ -8230,7 +8230,7 @@ "source_location": "L247", "_origin": "ast", "id": "app_core_api_request_log_middleware_apirequestlogmiddleware", - "community": 58, + "community": 45, "norm_label": "apirequestlogmiddleware" }, { @@ -8240,7 +8240,7 @@ "source_location": "L248", "_origin": "ast", "id": "app_core_api_request_log_middleware_apirequestlogmiddleware_dispatch", - "community": 58, + "community": 45, "norm_label": ".dispatch()" }, { @@ -8250,7 +8250,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_api_request_log_middleware_rationale_1", - "community": 58, + "community": 45, "norm_label": "\u7edf\u4e00\u8bb0\u5f55 api \u8bf7\u6c42/\u54cd\u5e94\u51fa\u5165\u53c2\u7684\u4e2d\u95f4\u4ef6" }, { @@ -8260,7 +8260,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_attachment_biz", - "community": 3, + "community": 111, "norm_label": "attachment_biz.py" }, { @@ -8270,7 +8270,7 @@ "source_location": "L21", "_origin": "ast", "id": "app_core_attachment_biz_resolve_upload_folder", - "community": 3, + "community": 111, "norm_label": "resolve_upload_folder()" }, { @@ -8280,7 +8280,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_attachment_biz_rationale_1", - "community": 3, + "community": 111, "norm_label": "\u9644\u4ef6\u4e0a\u4f20 biztype \u4e0e minio \u76ee\u5f55\u6620\u5c04(\u5bf9\u9f50\u539f crm oss \u4e0a\u4f20\u8bed\u4e49)" }, { @@ -8290,7 +8290,7 @@ "source_location": "L22", "_origin": "ast", "id": "app_core_attachment_biz_rationale_22", - "community": 3, + "community": 111, "norm_label": "\u4f18\u5148\u4f7f\u7528\u663e\u5f0f folder;\u5426\u5219\u6309 biztype \u6620\u5c04\u9ed8\u8ba4\u76ee\u5f55\u3002" }, { @@ -8420,7 +8420,7 @@ "source_location": "", "_origin": "ast", "id": "timedelta", - "community": 8, + "community": 68, "norm_label": "timedelta" }, { @@ -8720,7 +8720,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_data_scope", - "community": 69, + "community": 3, "norm_label": "data_scope.py" }, { @@ -8760,7 +8760,7 @@ "source_location": "L62", "_origin": "ast", "id": "app_core_data_scope_resolve_user_role_scopes", - "community": 69, + "community": 58, "norm_label": "_resolve_user_role_scopes()" }, { @@ -8810,7 +8810,7 @@ "source_location": "L274", "_origin": "ast", "id": "app_core_data_scope_assert_row_in_data_scope", - "community": 69, + "community": 36, "norm_label": "assert_row_in_data_scope()" }, { @@ -8820,7 +8820,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_data_scope_rationale_1", - "community": 69, + "community": 3, "norm_label": "\u6570\u636e\u6743\u9650\u8fc7\u6ee4(v0.3:\u57fa\u4e8e\u89d2\u8272 data_scope \u7684\u67e5\u8be2\u7ea7\u884c\u7ea7\u8fc7\u6ee4) data_scope \u503c: 1 = \u5168\u90e8\u6570\u636e 2 = \u672c\u90e8\u95e8\u6570\u636e 3" }, { @@ -8850,7 +8850,7 @@ "source_location": "L65", "_origin": "ast", "id": "app_core_data_scope_rationale_65", - "community": 69, + "community": 58, "norm_label": "\u83b7\u53d6\u7528\u6237\u6240\u6709\u89d2\u8272\u7684\u6570\u636e\u6743\u9650\u914d\u7f6e\u3002 \u8fd4\u56de: [{\"data_scope\": str, \"details\": [sysroledatascopedetai" }, { @@ -8940,7 +8940,7 @@ "source_location": "L22", "_origin": "ast", "id": "app_core_db_auth_dbusercontext", - "community": 107, + "community": 16, "norm_label": "dbusercontext" }, { @@ -8950,7 +8950,7 @@ "source_location": "L31", "_origin": "ast", "id": "app_core_db_auth_dbusercontext_to_tenant_user_dict", - "community": 107, + "community": 16, "norm_label": ".to_tenant_user_dict()" }, { @@ -8960,7 +8960,7 @@ "source_location": "", "_origin": "ast", "id": "app_core_db_auth_py_any", - "community": 107, + "community": 16, "norm_label": "any" }, { @@ -8970,7 +8970,7 @@ "source_location": "L38", "_origin": "ast", "id": "app_core_db_auth_dbusercontext_to_user_info", - "community": 107, + "community": 16, "norm_label": ".to_user_info()" }, { @@ -9020,7 +9020,7 @@ "source_location": "L23", "_origin": "ast", "id": "app_core_db_auth_rationale_23", - "community": 107, + "community": 16, "norm_label": "db router/service \u4f7f\u7528\u7684\u5f53\u524d\u7528\u6237\u4e0a\u4e0b\u6587\u3002" }, { @@ -9030,7 +9030,7 @@ "source_location": "L39", "_origin": "ast", "id": "app_core_db_auth_rationale_39", - "community": 107, + "community": 16, "norm_label": "\u4e0e\u95e8\u6237 jwt / apply_data_scope \u6240\u9700\u7684 user_info \u5b57\u6bb5\u5bf9\u9f50\u3002" }, { @@ -9580,7 +9580,7 @@ "source_location": "L15", "_origin": "ast", "id": "app_core_menu_guard_require_admin_or_super_admin", - "community": 30, + "community": 36, "norm_label": "require_admin_or_super_admin()" }, { @@ -9610,7 +9610,7 @@ "source_location": "L28", "_origin": "ast", "id": "app_core_menu_guard_require_menu_code", - "community": 68, + "community": 150, "norm_label": "require_menu_code()" }, { @@ -9630,7 +9630,7 @@ "source_location": "L16", "_origin": "ast", "id": "app_core_menu_guard_rationale_16", - "community": 30, + "community": 36, "norm_label": "\u8fd0\u8425\u7aef\u89d2\u8272\u5b88\u536b:admin / super_admin \u53ef\u8bbf\u95ee\u3002" }, { @@ -9650,7 +9650,7 @@ "source_location": "L29", "_origin": "ast", "id": "app_core_menu_guard_rationale_29", - "community": 68, + "community": 150, "norm_label": "\u63a5\u53e3\u83dc\u5355\u6743\u9650\u5b88\u536b\u3002super_admin \u76f4\u63a5\u653e\u884c\u3002" }, { @@ -9660,7 +9660,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_oper_log_context", - "community": 58, + "community": 46, "norm_label": "oper_log_context.py" }, { @@ -9670,7 +9670,7 @@ "source_location": "L10", "_origin": "ast", "id": "app_core_oper_log_context_operlogmeta", - "community": 58, + "community": 46, "norm_label": "operlogmeta" }, { @@ -9680,7 +9680,7 @@ "source_location": "L20", "_origin": "ast", "id": "app_core_oper_log_context_set_oper_log_meta", - "community": 58, + "community": 46, "norm_label": "set_oper_log_meta()" }, { @@ -9690,7 +9690,7 @@ "source_location": "L24", "_origin": "ast", "id": "app_core_oper_log_context_get_oper_log_meta", - "community": 58, + "community": 46, "norm_label": "get_oper_log_meta()" }, { @@ -9700,7 +9700,7 @@ "source_location": "L28", "_origin": "ast", "id": "app_core_oper_log_context_clear_oper_log_meta", - "community": 58, + "community": 45, "norm_label": "clear_oper_log_meta()" }, { @@ -9710,7 +9710,7 @@ "source_location": "L32", "_origin": "ast", "id": "app_core_oper_log_context_snapshot_oper_log_meta", - "community": 58, + "community": 46, "norm_label": "snapshot_oper_log_meta()" }, { @@ -9720,7 +9720,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_oper_log_context_rationale_1", - "community": 58, + "community": 46, "norm_label": "\u8bf7\u6c42\u7ea7\u64cd\u4f5c\u65e5\u5fd7\u5143\u6570\u636e(contextvar)" }, { @@ -9730,7 +9730,7 @@ "source_location": "L33", "_origin": "ast", "id": "app_core_oper_log_context_rationale_33", - "community": 58, + "community": 46, "norm_label": "\u4f9b\u5f02\u6b65\u843d\u5e93\u7ebf\u7a0b\u4f7f\u7528,\u907f\u514d contextvar \u8de8\u7ebf\u7a0b\u4e22\u5931\u3002" }, { @@ -9740,7 +9740,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_oper_log_decorator", - "community": 58, + "community": 46, "norm_label": "oper_log_decorator.py" }, { @@ -9750,7 +9750,7 @@ "source_location": "L23", "_origin": "ast", "id": "app_core_oper_log_decorator_to_dict", - "community": 58, + "community": 46, "norm_label": "_to_dict()" }, { @@ -9760,7 +9760,7 @@ "source_location": "", "_origin": "ast", "id": "app_core_oper_log_decorator_py_any", - "community": 58, + "community": 46, "norm_label": "any" }, { @@ -9770,7 +9770,7 @@ "source_location": "L36", "_origin": "ast", "id": "app_core_oper_log_decorator_pick_field", - "community": 58, + "community": 46, "norm_label": "_pick_field()" }, { @@ -9780,7 +9780,7 @@ "source_location": "L49", "_origin": "ast", "id": "app_core_oper_log_decorator_resolve_business_id", - "community": 58, + "community": 46, "norm_label": "_resolve_business_id()" }, { @@ -9790,7 +9790,7 @@ "source_location": "L73", "_origin": "ast", "id": "app_core_oper_log_decorator_format_summary", - "community": 58, + "community": 46, "norm_label": "_format_summary()" }, { @@ -9800,7 +9800,7 @@ "source_location": "L95", "_origin": "ast", "id": "app_core_oper_log_decorator_preserve_fastapi_signature", - "community": 58, + "community": 46, "norm_label": "_preserve_fastapi_signature()" }, { @@ -9810,7 +9810,7 @@ "source_location": "L118", "_origin": "ast", "id": "app_core_oper_log_decorator_oper_log", - "community": 58, + "community": 46, "norm_label": "oper_log()" }, { @@ -9820,7 +9820,7 @@ "source_location": "", "_origin": "ast", "id": "f", - "community": 58, + "community": 46, "norm_label": "f" }, { @@ -9830,7 +9830,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_oper_log_decorator_rationale_1", - "community": 58, + "community": 46, "norm_label": "\u8def\u7531\u64cd\u4f5c\u65e5\u5fd7\u88c5\u9970\u5668:\u5199\u5165 contextvar \u4f9b\u4e2d\u95f4\u4ef6\u843d\u5e93" }, { @@ -9840,7 +9840,7 @@ "source_location": "L96", "_origin": "ast", "id": "app_core_oper_log_decorator_rationale_96", - "community": 58, + "community": 46, "norm_label": "fastapi \u901a\u8fc7 inspect.signature + wrapper.__globals__ \u89e3\u6790\u7c7b\u578b;\u9700\u5728\u539f\u51fd\u6570\u547d\u540d\u7a7a\u95f4\u4e0b\u89e3\u6790\u540e\u5199\u56de\u3002" }, { @@ -9850,7 +9850,7 @@ "source_location": "L125", "_origin": "ast", "id": "app_core_oper_log_decorator_rationale_125", - "community": 58, + "community": 46, "norm_label": "\u5728 handler \u6267\u884c\u524d\u8bbe\u7f6e\u64cd\u4f5c\u65e5\u5fd7\u5143\u6570\u636e\u3002" }, { @@ -9860,7 +9860,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_oper_log_infer", - "community": 58, + "community": 45, "norm_label": "oper_log_infer.py" }, { @@ -9870,7 +9870,7 @@ "source_location": "L42", "_origin": "ast", "id": "app_core_oper_log_infer_title_from_path", - "community": 58, + "community": 45, "norm_label": "title_from_path()" }, { @@ -9880,7 +9880,7 @@ "source_location": "L50", "_origin": "ast", "id": "app_core_oper_log_infer_business_type_from_path", - "community": 58, + "community": 45, "norm_label": "business_type_from_path()" }, { @@ -10000,7 +10000,7 @@ "source_location": "L32", "_origin": "ast", "id": "app_core_redis_client_get_sync_redis_client", - "community": 19, + "community": 220, "norm_label": "get_sync_redis_client()" }, { @@ -10040,7 +10040,7 @@ "source_location": "L33", "_origin": "ast", "id": "app_core_redis_client_rationale_33", - "community": 19, + "community": 220, "norm_label": "\u540c\u6b65 redis(auth \u4f1a\u8bdd\u7b49,\u5728\u7ebf\u7a0b\u6c60\u4e2d\u8c03\u7528)\u3002" }, { @@ -10100,7 +10100,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_core_response", - "community": 81, + "community": 36, "norm_label": "response.py" }, { @@ -10110,7 +10110,7 @@ "source_location": "L8", "_origin": "ast", "id": "app_core_response_responsemodel", - "community": 81, + "community": 36, "norm_label": "responsemodel" }, { @@ -10120,7 +10120,7 @@ "source_location": "L15", "_origin": "ast", "id": "app_core_response_config", - "community": 81, + "community": 36, "norm_label": "config" }, { @@ -10130,7 +10130,7 @@ "source_location": "L19", "_origin": "ast", "id": "app_core_response_pageresult", - "community": 81, + "community": 36, "norm_label": "pageresult" }, { @@ -10160,7 +10160,7 @@ "source_location": "L39", "_origin": "ast", "id": "app_core_response_format_api_error_message", - "community": 81, + "community": 36, "norm_label": "format_api_error_message()" }, { @@ -10170,7 +10170,7 @@ "source_location": "", "_origin": "ast", "id": "app_core_response_py_exception", - "community": 81, + "community": 36, "norm_label": "exception" }, { @@ -10190,7 +10190,7 @@ "source_location": "L40", "_origin": "ast", "id": "app_core_response_rationale_40", - "community": 81, + "community": 36, "norm_label": "\u5c06 http/sqlalchemy \u7b49\u5f02\u5e38\u8f6c\u4e3a\u53ef\u5c55\u793a\u7684\u9519\u8bef\u6587\u6848(\u907f\u514d str([]) \u7a7a\u5217\u8868)\u3002" }, { @@ -10800,7 +10800,7 @@ "source_location": "L9", "_origin": "ast", "id": "app_core_utils_generate_uuid", - "community": 154, + "community": 38, "norm_label": "generate_uuid()" }, { @@ -10810,7 +10810,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_core_utils_generate_id", - "community": 58, + "community": 45, "norm_label": "generate_id()" }, { @@ -10850,7 +10850,7 @@ "source_location": "L31", "_origin": "ast", "id": "app_core_utils_format_datetime", - "community": 159, + "community": 86, "norm_label": "format_datetime()" }, { @@ -11400,7 +11400,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_api_request_log", - "community": 58, + "community": 24, "norm_label": "api_request_log.py" }, { @@ -11410,7 +11410,7 @@ "source_location": "L12", "_origin": "ast", "id": "app_crud_api_request_log_apirequestlogcrud", - "community": 58, + "community": 24, "norm_label": "apirequestlogcrud" }, { @@ -11420,7 +11420,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_crud_api_request_log_apirequestlogcrud_get_multi_with_filters", - "community": 58, + "community": 24, "norm_label": ".get_multi_with_filters()" }, { @@ -11430,7 +11430,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_api_request_log_py_session", - "community": 58, + "community": 24, "norm_label": "session" }, { @@ -11440,7 +11440,7 @@ "source_location": "L85", "_origin": "ast", "id": "app_crud_api_request_log_apirequestlogcrud_get", - "community": 58, + "community": 24, "norm_label": ".get()" }, { @@ -11450,7 +11450,7 @@ "source_location": "L91", "_origin": "ast", "id": "app_crud_api_request_log_apirequestlogcrud_delete", - "community": 58, + "community": 24, "norm_label": ".delete()" }, { @@ -12410,7 +12410,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_contract", - "community": 91, + "community": 26, "norm_label": "contract.py" }, { @@ -12450,7 +12450,7 @@ "source_location": "L69", "_origin": "ast", "id": "app_crud_crm_contract_total_pages", - "community": 24, + "community": 83, "norm_label": "total_pages()" }, { @@ -12510,7 +12510,7 @@ "source_location": "L101", "_origin": "ast", "id": "app_crud_crm_contract_parse_optional_datetime", - "community": 91, + "community": 26, "norm_label": "_parse_optional_datetime()" }, { @@ -12520,7 +12520,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_contract_py_datetime", - "community": 91, + "community": 26, "norm_label": "datetime" }, { @@ -12540,7 +12540,7 @@ "source_location": "L124", "_origin": "ast", "id": "app_crud_crm_contract_resolve_user_display_name", - "community": 26, + "community": 91, "norm_label": "_resolve_user_display_name()" }, { @@ -12570,7 +12570,7 @@ "source_location": "L146", "_origin": "ast", "id": "app_crud_crm_contract_get_default_invoice_info", - "community": 26, + "community": 91, "norm_label": "_get_default_invoice_info()" }, { @@ -12590,7 +12590,7 @@ "source_location": "L168", "_origin": "ast", "id": "app_crud_crm_contract_row_to_dict", - "community": 91, + "community": 26, "norm_label": "_row_to_dict()" }, { @@ -12600,7 +12600,7 @@ "source_location": "L245", "_origin": "ast", "id": "app_crud_crm_contract_contract_row_to_dict", - "community": 91, + "community": 26, "norm_label": "contract_row_to_dict()" }, { @@ -12640,7 +12640,7 @@ "source_location": "L424", "_origin": "ast", "id": "app_crud_crm_contract_get_contract", - "community": 26, + "community": 91, "norm_label": "get_contract()" }, { @@ -12920,7 +12920,7 @@ "source_location": "L1421", "_origin": "ast", "id": "app_crud_crm_contract_statistics_overview", - "community": 91, + "community": 26, "norm_label": "statistics_overview()" }, { @@ -12930,7 +12930,7 @@ "source_location": "L1484", "_origin": "ast", "id": "app_crud_crm_contract_statistics_by_status", - "community": 91, + "community": 26, "norm_label": "statistics_by_status()" }, { @@ -12940,7 +12940,7 @@ "source_location": "L1518", "_origin": "ast", "id": "app_crud_crm_contract_statistics_by_type", - "community": 91, + "community": 26, "norm_label": "statistics_by_type()" }, { @@ -12950,7 +12950,7 @@ "source_location": "L1553", "_origin": "ast", "id": "app_crud_crm_contract_contract_period_key", - "community": 91, + "community": 26, "norm_label": "_contract_period_key()" }, { @@ -12960,7 +12960,7 @@ "source_location": "L1562", "_origin": "ast", "id": "app_crud_crm_contract_statistics_trend", - "community": 91, + "community": 26, "norm_label": "statistics_trend()" }, { @@ -12970,7 +12970,7 @@ "source_location": "L1608", "_origin": "ast", "id": "app_crud_crm_contract_query_expiring", - "community": 91, + "community": 26, "norm_label": "query_expiring()" }, { @@ -12980,7 +12980,7 @@ "source_location": "L1635", "_origin": "ast", "id": "app_crud_crm_contract_quote_products_to_contract_products", - "community": 91, + "community": 8, "norm_label": "_quote_products_to_contract_products()" }, { @@ -12990,7 +12990,7 @@ "source_location": "L1666", "_origin": "ast", "id": "app_crud_crm_contract_create_from_quote", - "community": 91, + "community": 8, "norm_label": "create_from_quote()" }, { @@ -13000,7 +13000,7 @@ "source_location": "L1725", "_origin": "ast", "id": "app_crud_crm_contract_renew_contract", - "community": 91, + "community": 26, "norm_label": "renew_contract()" }, { @@ -13010,7 +13010,7 @@ "source_location": "L1779", "_origin": "ast", "id": "app_crud_crm_contract_export_contracts", - "community": 91, + "community": 26, "norm_label": "export_contracts()" }, { @@ -13020,7 +13020,7 @@ "source_location": "L1796", "_origin": "ast", "id": "app_crud_crm_contract_change_row_to_dict", - "community": 24, + "community": 91, "norm_label": "_change_row_to_dict()" }, { @@ -13030,7 +13030,7 @@ "source_location": "L1818", "_origin": "ast", "id": "app_crud_crm_contract_list_contract_changes", - "community": 24, + "community": 26, "norm_label": "list_contract_changes()" }, { @@ -13040,7 +13040,7 @@ "source_location": "L1847", "_origin": "ast", "id": "app_crud_crm_contract_get_contract_change_detail", - "community": 24, + "community": 91, "norm_label": "get_contract_change_detail()" }, { @@ -13060,7 +13060,7 @@ "source_location": "L1896", "_origin": "ast", "id": "app_crud_crm_contract_list_contract_templates", - "community": 24, + "community": 83, "norm_label": "list_contract_templates()" }, { @@ -13080,7 +13080,7 @@ "source_location": "L1949", "_origin": "ast", "id": "app_crud_crm_contract_opportunity_products_to_contract_products", - "community": 91, + "community": 26, "norm_label": "_opportunity_products_to_contract_products()" }, { @@ -13090,7 +13090,7 @@ "source_location": "L1974", "_origin": "ast", "id": "app_crud_crm_contract_create_from_opportunity", - "community": 91, + "community": 26, "norm_label": "create_from_opportunity()" }, { @@ -13130,7 +13130,7 @@ "source_location": "L2109", "_origin": "ast", "id": "app_crud_crm_contract_generate_template_no", - "community": 91, + "community": 26, "norm_label": "generate_template_no()" }, { @@ -13140,7 +13140,7 @@ "source_location": "L2141", "_origin": "ast", "id": "app_crud_crm_contract_get_change_row", - "community": 24, + "community": 83, "norm_label": "_get_change_row()" }, { @@ -13150,7 +13150,7 @@ "source_location": "L2153", "_origin": "ast", "id": "app_crud_crm_contract_enrich_change_rows", - "community": 91, + "community": 26, "norm_label": "_enrich_change_rows()" }, { @@ -13160,7 +13160,7 @@ "source_location": "L2168", "_origin": "ast", "id": "app_crud_crm_contract_create_contract_change", - "community": 24, + "community": 91, "norm_label": "create_contract_change()" }, { @@ -13170,7 +13170,7 @@ "source_location": "L2219", "_origin": "ast", "id": "app_crud_crm_contract_update_contract_change", - "community": 24, + "community": 91, "norm_label": "update_contract_change()" }, { @@ -13180,7 +13180,7 @@ "source_location": "L2257", "_origin": "ast", "id": "app_crud_crm_contract_soft_delete_contract_changes", - "community": 24, + "community": 83, "norm_label": "soft_delete_contract_changes()" }, { @@ -13190,7 +13190,7 @@ "source_location": "L2283", "_origin": "ast", "id": "app_crud_crm_contract_submit_change_approval", - "community": 24, + "community": 83, "norm_label": "submit_change_approval()" }, { @@ -13200,7 +13200,7 @@ "source_location": "L2306", "_origin": "ast", "id": "app_crud_crm_contract_withdraw_change", - "community": 24, + "community": 83, "norm_label": "withdraw_change()" }, { @@ -13210,7 +13210,7 @@ "source_location": "L2319", "_origin": "ast", "id": "app_crud_crm_contract_execute_change", - "community": 24, + "community": 83, "norm_label": "execute_change()" }, { @@ -13220,7 +13220,7 @@ "source_location": "L2331", "_origin": "ast", "id": "app_crud_crm_contract_export_contract_changes", - "community": 24, + "community": 26, "norm_label": "export_contract_changes()" }, { @@ -13250,7 +13250,7 @@ "source_location": "L2454", "_origin": "ast", "id": "app_crud_crm_contract_soft_delete_contract_templates", - "community": 24, + "community": 26, "norm_label": "soft_delete_contract_templates()" }, { @@ -13260,7 +13260,7 @@ "source_location": "L2488", "_origin": "ast", "id": "app_crud_crm_contract_toggle_contract_template_active", - "community": 24, + "community": 26, "norm_label": "toggle_contract_template_active()" }, { @@ -13270,7 +13270,7 @@ "source_location": "L2514", "_origin": "ast", "id": "app_crud_crm_contract_export_contract_templates", - "community": 24, + "community": 83, "norm_label": "export_contract_templates()" }, { @@ -13280,7 +13280,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_contract_rationale_1", - "community": 91, + "community": 26, "norm_label": "crm \u5408\u540c crud \u2014 \u5bf9\u7167 crmcontractserviceimpl.java(\u5217\u8868/\u8be6\u60c5 p1)" }, { @@ -13290,7 +13290,7 @@ "source_location": "L169", "_origin": "ast", "id": "app_crud_crm_contract_rationale_169", - "community": 91, + "community": 26, "norm_label": "orm \u2192 camelcase(\u5355\u70b9\u771f\u76f8)" }, { @@ -13370,7 +13370,7 @@ "source_location": "L1676", "_origin": "ast", "id": "app_crud_crm_contract_rationale_1676", - "community": 91, + "community": 8, "norm_label": "java: createfromquote \u2014 \u8fd4\u56de\u5408\u540c id" }, { @@ -13380,7 +13380,7 @@ "source_location": "L1735", "_origin": "ast", "id": "app_crud_crm_contract_rationale_1735", - "community": 91, + "community": 26, "norm_label": "java: renewcontract \u2014 \u57fa\u7840\u7eed\u7b7e" }, { @@ -13390,7 +13390,7 @@ "source_location": "L1786", "_origin": "ast", "id": "app_crud_crm_contract_rationale_1786", - "community": 91, + "community": 26, "norm_label": "java: querylist for export" }, { @@ -13400,7 +13400,7 @@ "source_location": "L1984", "_origin": "ast", "id": "app_crud_crm_contract_rationale_1984", - "community": 91, + "community": 26, "norm_label": "java: createfromopportunity \u2014 \u8fd4\u56de\u5408\u540c id" }, { @@ -13430,7 +13430,7 @@ "source_location": "L2110", "_origin": "ast", "id": "app_crud_crm_contract_rationale_2110", - "community": 91, + "community": 26, "norm_label": "java: generatetemplateno \u2014 tmpl{yyyymmdd}{4\u4f4d\u5e8f\u53f7}" }, { @@ -13440,7 +13440,7 @@ "source_location": "L2292", "_origin": "ast", "id": "app_crud_crm_contract_rationale_2292", - "community": 24, + "community": 83, "norm_label": "java controller todo \u2014 \u4fdd\u6301 pending,\u8bb0\u5f55\u5907\u6ce8" }, { @@ -13570,7 +13570,7 @@ "source_location": "L179", "_origin": "ast", "id": "app_crud_crm_contract_approval_delete_pending_approvals", - "community": 83, + "community": 26, "norm_label": "delete_pending_approvals()" }, { @@ -13690,7 +13690,7 @@ "source_location": "L180", "_origin": "ast", "id": "app_crud_crm_contract_approval_rationale_180", - "community": 83, + "community": 26, "norm_label": "java: withdraw \u2014 \u8f6f\u5220\u9664 pending \u5ba1\u6279" }, { @@ -13743,6 +13743,76 @@ "community": 83, "norm_label": "java: approvetransfer" }, + { + "label": "contract_approver_setting.py", + "file_type": "code", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L1", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting", + "community": 170, + "norm_label": "contract_approver_setting.py" + }, + { + "label": "_row_to_dict()", + "file_type": "code", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L14", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting_row_to_dict", + "community": 170, + "norm_label": "_row_to_dict()" + }, + { + "label": "Any", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting_py_any", + "community": 170, + "norm_label": "any" + }, + { + "label": "get_setting()", + "file_type": "code", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L24", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting_get_setting", + "community": 170, + "norm_label": "get_setting()" + }, + { + "label": "Session", + "file_type": "code", + "source_file": "", + "source_location": "", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting_py_session", + "community": 170, + "norm_label": "session" + }, + { + "label": "_assert_users_exist()", + "file_type": "code", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L37", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting_assert_users_exist", + "community": 170, + "norm_label": "_assert_users_exist()" + }, + { + "label": "save_setting()", + "file_type": "code", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L52", + "_origin": "ast", + "id": "app_crud_crm_contract_approver_setting_save_setting", + "community": 170, + "norm_label": "save_setting()" + }, { "label": "contract_product.py", "file_type": "code", @@ -14080,7 +14150,7 @@ "source_location": "L161", "_origin": "ast", "id": "app_crud_crm_customer_list_customers", - "community": 156, + "community": 64, "norm_label": "list_customers()" }, { @@ -14280,7 +14350,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_customer_follow", - "community": 146, + "community": 34, "norm_label": "customer_follow.py" }, { @@ -14290,7 +14360,7 @@ "source_location": "L18", "_origin": "ast", "id": "app_crud_crm_customer_follow_total_pages", - "community": 146, + "community": 34, "norm_label": "total_pages()" }, { @@ -14300,7 +14370,7 @@ "source_location": "L27", "_origin": "ast", "id": "app_crud_crm_customer_follow_enrich_follow_dict", - "community": 146, + "community": 34, "norm_label": "_enrich_follow_dict()" }, { @@ -14310,7 +14380,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_customer_follow_py_session", - "community": 146, + "community": 34, "norm_label": "session" }, { @@ -14320,7 +14390,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_customer_follow_py_any", - "community": 146, + "community": 34, "norm_label": "any" }, { @@ -14330,7 +14400,7 @@ "source_location": "L36", "_origin": "ast", "id": "app_crud_crm_customer_follow_row_to_dict", - "community": 146, + "community": 34, "norm_label": "_row_to_dict()" }, { @@ -14340,7 +14410,7 @@ "source_location": "L60", "_origin": "ast", "id": "app_crud_crm_customer_follow_list_follows", - "community": 146, + "community": 34, "norm_label": "list_follows()" }, { @@ -14350,7 +14420,7 @@ "source_location": "L117", "_origin": "ast", "id": "app_crud_crm_customer_follow_list_follows_by_customer", - "community": 146, + "community": 34, "norm_label": "list_follows_by_customer()" }, { @@ -14360,7 +14430,7 @@ "source_location": "L140", "_origin": "ast", "id": "app_crud_crm_customer_follow_get_follow", - "community": 146, + "community": 34, "norm_label": "get_follow()" }, { @@ -14380,7 +14450,7 @@ "source_location": "L204", "_origin": "ast", "id": "app_crud_crm_customer_follow_update_follow", - "community": 146, + "community": 34, "norm_label": "update_follow()" }, { @@ -14390,7 +14460,7 @@ "source_location": "L235", "_origin": "ast", "id": "app_crud_crm_customer_follow_soft_delete_follow", - "community": 146, + "community": 34, "norm_label": "soft_delete_follow()" }, { @@ -14480,7 +14550,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers", - "community": 146, + "community": 67, "norm_label": "data_scope_helpers.py" }, { @@ -14510,7 +14580,7 @@ "source_location": "L25", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_apply_crm_owner_scope", - "community": 91, + "community": 26, "norm_label": "apply_crm_owner_scope()" }, { @@ -14520,7 +14590,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_py_session", - "community": 93, + "community": 67, "norm_label": "session" }, { @@ -14540,7 +14610,7 @@ "source_location": "L39", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_ensure_crm_owner_row_in_scope", - "community": 93, + "community": 67, "norm_label": "ensure_crm_owner_row_in_scope()" }, { @@ -14550,7 +14620,7 @@ "source_location": "L48", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_ensure_crm_create_by_row_in_scope", - "community": 146, + "community": 94, "norm_label": "ensure_crm_create_by_row_in_scope()" }, { @@ -14570,7 +14640,7 @@ "source_location": "L78", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_ensure_crm_customer_linked_row_in_scope", - "community": 93, + "community": 67, "norm_label": "ensure_crm_customer_linked_row_in_scope()" }, { @@ -14580,7 +14650,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_rationale_1", - "community": 146, + "community": 67, "norm_label": "crm \u6570\u636e\u6743\u9650\u8f85\u52a9(\u8d1f\u8d23\u4eba owner_user_id + \u6807\u51c6 create_by/create_dept_id)\u3002" }, { @@ -14600,7 +14670,7 @@ "source_location": "L87", "_origin": "ast", "id": "app_crud_crm_data_scope_helpers_rationale_87", - "community": 93, + "community": 67, "norm_label": "\u5ba2\u6237\u5b50\u8868(\u5f00\u7968\u4fe1\u606f\u7b49):\u5148\u6821\u9a8c\u5173\u8054\u5ba2\u6237 owner scope,\u5426\u5219\u6821\u9a8c create_by\u3002" }, { @@ -14610,7 +14680,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_invoice_info", - "community": 93, + "community": 67, "norm_label": "invoice_info.py" }, { @@ -14620,7 +14690,7 @@ "source_location": "L21", "_origin": "ast", "id": "app_crud_crm_invoice_info_row_to_dict", - "community": 93, + "community": 67, "norm_label": "_row_to_dict()" }, { @@ -14630,7 +14700,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_invoice_info_py_any", - "community": 93, + "community": 67, "norm_label": "any" }, { @@ -14640,7 +14710,7 @@ "source_location": "L43", "_origin": "ast", "id": "app_crud_crm_invoice_info_list_invoice_info_by_customer", - "community": 93, + "community": 67, "norm_label": "list_invoice_info_by_customer()" }, { @@ -14650,7 +14720,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_invoice_info_py_session", - "community": 93, + "community": 67, "norm_label": "session" }, { @@ -14660,7 +14730,7 @@ "source_location": "L72", "_origin": "ast", "id": "app_crud_crm_invoice_info_get_invoice_info", - "community": 93, + "community": 67, "norm_label": "get_invoice_info()" }, { @@ -14670,7 +14740,7 @@ "source_location": "L83", "_origin": "ast", "id": "app_crud_crm_invoice_info_clear_default_for_customer", - "community": 93, + "community": 67, "norm_label": "_clear_default_for_customer()" }, { @@ -14680,7 +14750,7 @@ "source_location": "L100", "_origin": "ast", "id": "app_crud_crm_invoice_info_create_invoice_info", - "community": 93, + "community": 67, "norm_label": "create_invoice_info()" }, { @@ -14690,7 +14760,7 @@ "source_location": "L155", "_origin": "ast", "id": "app_crud_crm_invoice_info_update_invoice_info", - "community": 93, + "community": 67, "norm_label": "update_invoice_info()" }, { @@ -14700,7 +14770,7 @@ "source_location": "L207", "_origin": "ast", "id": "app_crud_crm_invoice_info_set_default_invoice_info", - "community": 93, + "community": 67, "norm_label": "set_default_invoice_info()" }, { @@ -14710,7 +14780,7 @@ "source_location": "L234", "_origin": "ast", "id": "app_crud_crm_invoice_info_soft_delete_invoice_info", - "community": 93, + "community": 67, "norm_label": "soft_delete_invoice_info()" }, { @@ -15470,7 +15540,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_pool_rule", - "community": 154, + "community": 94, "norm_label": "pool_rule.py" }, { @@ -15480,7 +15550,7 @@ "source_location": "L25", "_origin": "ast", "id": "app_crud_crm_pool_rule_total_pages", - "community": 154, + "community": 94, "norm_label": "total_pages()" }, { @@ -15490,7 +15560,7 @@ "source_location": "L31", "_origin": "ast", "id": "app_crud_crm_pool_rule_row_to_dict", - "community": 154, + "community": 94, "norm_label": "_row_to_dict()" }, { @@ -15500,7 +15570,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_pool_rule_py_any", - "community": 154, + "community": 94, "norm_label": "any" }, { @@ -15510,7 +15580,7 @@ "source_location": "L48", "_origin": "ast", "id": "app_crud_crm_pool_rule_list_pool_rules", - "community": 154, + "community": 94, "norm_label": "list_pool_rules()" }, { @@ -15520,7 +15590,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_crm_pool_rule_py_session", - "community": 154, + "community": 94, "norm_label": "session" }, { @@ -15530,7 +15600,7 @@ "source_location": "L81", "_origin": "ast", "id": "app_crud_crm_pool_rule_get_pool_rule", - "community": 154, + "community": 94, "norm_label": "get_pool_rule()" }, { @@ -15540,7 +15610,7 @@ "source_location": "L93", "_origin": "ast", "id": "app_crud_crm_pool_rule_create_pool_rule", - "community": 154, + "community": 94, "norm_label": "create_pool_rule()" }, { @@ -15550,7 +15620,7 @@ "source_location": "L125", "_origin": "ast", "id": "app_crud_crm_pool_rule_update_pool_rule", - "community": 154, + "community": 94, "norm_label": "update_pool_rule()" }, { @@ -15560,7 +15630,7 @@ "source_location": "L165", "_origin": "ast", "id": "app_crud_crm_pool_rule_delete_pool_rules", - "community": 154, + "community": 94, "norm_label": "delete_pool_rules()" }, { @@ -15570,7 +15640,7 @@ "source_location": "L184", "_origin": "ast", "id": "app_crud_crm_pool_rule_update_pool_rule_status", - "community": 154, + "community": 94, "norm_label": "update_pool_rule_status()" }, { @@ -15580,7 +15650,7 @@ "source_location": "L204", "_origin": "ast", "id": "app_crud_crm_pool_rule_execute_pool_rules", - "community": 154, + "community": 94, "norm_label": "execute_pool_rules()" }, { @@ -15590,7 +15660,7 @@ "source_location": "L231", "_origin": "ast", "id": "app_crud_crm_pool_rule_execute_single_rule", - "community": 154, + "community": 94, "norm_label": "_execute_single_rule()" }, { @@ -15600,7 +15670,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_crm_pool_rule_rationale_1", - "community": 154, + "community": 94, "norm_label": "crm \u516c\u6d77\u6c60\u89c4\u5219 crud + \u89c4\u5219\u6267\u884c\u903b\u8f91" }, { @@ -16330,7 +16400,7 @@ "source_location": "L59", "_origin": "ast", "id": "app_crud_crm_quote_total_pages", - "community": 8, + "community": 71, "norm_label": "total_pages()" }, { @@ -16700,7 +16770,7 @@ "source_location": "L1124", "_origin": "ast", "id": "app_crud_crm_quote_create_new_version", - "community": 8, + "community": 68, "norm_label": "create_new_version()" }, { @@ -16750,7 +16820,7 @@ "source_location": "L1335", "_origin": "ast", "id": "app_crud_crm_quote_statistics_status", - "community": 8, + "community": 68, "norm_label": "statistics_status()" }, { @@ -16880,7 +16950,7 @@ "source_location": "L1135", "_origin": "ast", "id": "app_crud_crm_quote_rationale_1135", - "community": 8, + "community": 68, "norm_label": "java: createnewversion \u2014 \u8fd4\u56de\u65b0\u62a5\u4ef7\u5355 id" }, { @@ -16910,7 +16980,7 @@ "source_location": "L1340", "_origin": "ast", "id": "app_crud_crm_quote_rationale_1340", - "community": 8, + "community": 68, "norm_label": "java: statisticsstatus" }, { @@ -17360,7 +17430,7 @@ "source_location": "L132", "_origin": "ast", "id": "app_crud_crm_quote_product_list_quote_products", - "community": 116, + "community": 8, "norm_label": "list_quote_products()" }, { @@ -17460,7 +17530,7 @@ "source_location": "L139", "_origin": "ast", "id": "app_crud_crm_quote_product_rationale_139", - "community": 116, + "community": 8, "norm_label": "java: querylistbyquoteid" }, { @@ -17560,7 +17630,7 @@ "source_location": "L97", "_origin": "ast", "id": "app_crud_crm_quote_share_log_share_log_statistics", - "community": 68, + "community": 113, "norm_label": "share_log_statistics()" }, { @@ -17600,7 +17670,7 @@ "source_location": "L104", "_origin": "ast", "id": "app_crud_crm_quote_share_log_rationale_104", - "community": 68, + "community": 113, "norm_label": "java: statisticsvisits" }, { @@ -17810,7 +17880,7 @@ "source_location": "L126", "_origin": "ast", "id": "app_crud_crm_supplier_info_get_supplier_info", - "community": 112, + "community": 8, "norm_label": "get_supplier_info()" }, { @@ -18040,7 +18110,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_dict_data", - "community": 37, + "community": 156, "norm_label": "dict_data.py" }, { @@ -18050,7 +18120,7 @@ "source_location": "L16", "_origin": "ast", "id": "app_crud_dict_data_row_to_dict", - "community": 37, + "community": 156, "norm_label": "_row_to_dict()" }, { @@ -18060,7 +18130,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_dict_data_py_any", - "community": 37, + "community": 156, "norm_label": "any" }, { @@ -18070,7 +18140,7 @@ "source_location": "L32", "_origin": "ast", "id": "app_crud_dict_data_list_dict_data", - "community": 37, + "community": 156, "norm_label": "list_dict_data()" }, { @@ -18080,7 +18150,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_dict_data_py_session", - "community": 37, + "community": 156, "norm_label": "session" }, { @@ -18090,7 +18160,7 @@ "source_location": "L68", "_origin": "ast", "id": "app_crud_dict_data_get_dict_data", - "community": 37, + "community": 156, "norm_label": "get_dict_data()" }, { @@ -18100,7 +18170,7 @@ "source_location": "L76", "_origin": "ast", "id": "app_crud_dict_data_create_dict_data", - "community": 37, + "community": 156, "norm_label": "create_dict_data()" }, { @@ -18110,7 +18180,7 @@ "source_location": "L110", "_origin": "ast", "id": "app_crud_dict_data_update_dict_data", - "community": 37, + "community": 156, "norm_label": "update_dict_data()" }, { @@ -18120,7 +18190,7 @@ "source_location": "L142", "_origin": "ast", "id": "app_crud_dict_data_soft_delete_dict_data", - "community": 37, + "community": 156, "norm_label": "soft_delete_dict_data()" }, { @@ -18130,7 +18200,7 @@ "source_location": "L153", "_origin": "ast", "id": "app_crud_dict_data_list_dict_data_options", - "community": 37, + "community": 156, "norm_label": "list_dict_data_options()" }, { @@ -18140,7 +18210,7 @@ "source_location": "L171", "_origin": "ast", "id": "app_crud_dict_data_total_pages", - "community": 37, + "community": 156, "norm_label": "total_pages()" }, { @@ -18150,7 +18220,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_dict_data_rationale_1", - "community": 37, + "community": 156, "norm_label": "\u5b57\u5178\u6570\u636e crud(sys_dict_data)" }, { @@ -18160,7 +18230,7 @@ "source_location": "L160", "_origin": "ast", "id": "app_crud_dict_data_rationale_160", - "community": 37, + "community": 156, "norm_label": "\u5b57\u5178\u4e0b\u62c9\u9009\u9879:\u79df\u6237\u4e3b\u6570\u636e,\u5ffd\u7565\u6570\u636e\u8303\u56f4(user_info \u4fdd\u7559\u517c\u5bb9\u8c03\u7528\u65b9,\u4e0d\u53c2\u4e0e\u8fc7\u6ee4)\u3002" }, { @@ -18290,7 +18360,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_ethnic", - "community": 49, + "community": 24, "norm_label": "ethnic.py" }, { @@ -18300,7 +18370,7 @@ "source_location": "L9", "_origin": "ast", "id": "app_crud_ethnic_row_to_dict", - "community": 49, + "community": 24, "norm_label": "_row_to_dict()" }, { @@ -18310,7 +18380,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_ethnic_py_any", - "community": 49, + "community": 24, "norm_label": "any" }, { @@ -18320,7 +18390,7 @@ "source_location": "L18", "_origin": "ast", "id": "app_crud_ethnic_list_ethnics", - "community": 49, + "community": 24, "norm_label": "list_ethnics()" }, { @@ -18330,7 +18400,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_ethnic_py_session", - "community": 49, + "community": 24, "norm_label": "session" }, { @@ -18340,7 +18410,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_ethnic_rationale_1", - "community": 49, + "community": 24, "norm_label": "\u6c11\u65cf\u7801\u8868 crud(\u5168\u5c40 sys_ethnic)" }, { @@ -19260,7 +19330,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_crud_site", - "community": 145, + "community": 70, "norm_label": "site.py" }, { @@ -19270,7 +19340,7 @@ "source_location": "L16", "_origin": "ast", "id": "app_crud_site_row_to_dict", - "community": 145, + "community": 70, "norm_label": "_row_to_dict()" }, { @@ -19280,7 +19350,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_site_py_any", - "community": 145, + "community": 70, "norm_label": "any" }, { @@ -19290,7 +19360,7 @@ "source_location": "L36", "_origin": "ast", "id": "app_crud_site_list_sites", - "community": 145, + "community": 70, "norm_label": "list_sites()" }, { @@ -19300,7 +19370,7 @@ "source_location": "", "_origin": "ast", "id": "app_crud_site_py_session", - "community": 145, + "community": 70, "norm_label": "session" }, { @@ -19310,7 +19380,7 @@ "source_location": "L69", "_origin": "ast", "id": "app_crud_site_get_site", - "community": 145, + "community": 70, "norm_label": "get_site()" }, { @@ -19320,7 +19390,7 @@ "source_location": "L77", "_origin": "ast", "id": "app_crud_site_site_code_exists", - "community": 145, + "community": 70, "norm_label": "site_code_exists()" }, { @@ -19330,7 +19400,7 @@ "source_location": "L84", "_origin": "ast", "id": "app_crud_site_create_site", - "community": 145, + "community": 70, "norm_label": "create_site()" }, { @@ -19340,7 +19410,7 @@ "source_location": "L131", "_origin": "ast", "id": "app_crud_site_update_site", - "community": 145, + "community": 70, "norm_label": "update_site()" }, { @@ -19350,7 +19420,7 @@ "source_location": "L183", "_origin": "ast", "id": "app_crud_site_soft_delete_site", - "community": 145, + "community": 70, "norm_label": "soft_delete_site()" }, { @@ -19360,7 +19430,7 @@ "source_location": "L194", "_origin": "ast", "id": "app_crud_site_total_pages", - "community": 145, + "community": 70, "norm_label": "total_pages()" }, { @@ -20550,7 +20620,7 @@ "source_location": "L267", "_origin": "ast", "id": "app_models_crm_models_crminvoiceinfo", - "community": 93, + "community": 67, "norm_label": "crminvoiceinfo" }, { @@ -20560,7 +20630,7 @@ "source_location": "L295", "_origin": "ast", "id": "app_models_crm_models_crmcustomerfollow", - "community": 146, + "community": 34, "norm_label": "crmcustomerfollow" }, { @@ -20580,7 +20650,7 @@ "source_location": "L352", "_origin": "ast", "id": "app_models_crm_models_crmcustomerpoolrule", - "community": 154, + "community": 94, "norm_label": "crmcustomerpoolrule" }, { @@ -20634,11 +20704,21 @@ "norm_label": "crmcontract" }, { - "label": "CrmContractApproval", + "label": "CrmContractApproverSetting", "file_type": "code", "source_file": "app/models/crm_models.py", "source_location": "L593", "_origin": "ast", + "id": "app_models_crm_models_crmcontractapproversetting", + "community": 170, + "norm_label": "crmcontractapproversetting" + }, + { + "label": "CrmContractApproval", + "file_type": "code", + "source_file": "app/models/crm_models.py", + "source_location": "L612", + "_origin": "ast", "id": "app_models_crm_models_crmcontractapproval", "community": 83, "norm_label": "crmcontractapproval" @@ -20647,17 +20727,17 @@ "label": "CrmContractChange", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L624", + "source_location": "L643", "_origin": "ast", "id": "app_models_crm_models_crmcontractchange", - "community": 24, + "community": 91, "norm_label": "crmcontractchange" }, { "label": "CrmContractTemplate", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L655", + "source_location": "L674", "_origin": "ast", "id": "app_models_crm_models_crmcontracttemplate", "community": 91, @@ -20667,7 +20747,7 @@ "label": "CrmContractProduct", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L689", + "source_location": "L708", "_origin": "ast", "id": "app_models_crm_models_crmcontractproduct", "community": 118, @@ -20677,7 +20757,7 @@ "label": "CrmContractProductPriceTier", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L730", + "source_location": "L749", "_origin": "ast", "id": "app_models_crm_models_crmcontractproductpricetier", "community": 118, @@ -20687,7 +20767,7 @@ "label": "CrmQuote", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L755", + "source_location": "L774", "_origin": "ast", "id": "app_models_crm_models_crmquote", "community": 8, @@ -20697,7 +20777,7 @@ "label": "CrmQuoteProduct", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L813", + "source_location": "L832", "_origin": "ast", "id": "app_models_crm_models_crmquoteproduct", "community": 116, @@ -20707,7 +20787,7 @@ "label": "CrmQuoteApproverSetting", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L851", + "source_location": "L870", "_origin": "ast", "id": "app_models_crm_models_crmquoteapproversetting", "community": 170, @@ -20717,7 +20797,7 @@ "label": "CrmQuoteApproval", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L870", + "source_location": "L889", "_origin": "ast", "id": "app_models_crm_models_crmquoteapproval", "community": 87, @@ -20727,7 +20807,7 @@ "label": "CrmQuoteShareLog", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L895", + "source_location": "L914", "_origin": "ast", "id": "app_models_crm_models_crmquotesharelog", "community": 113, @@ -20737,7 +20817,7 @@ "label": "CrmClue", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L921", + "source_location": "L940", "_origin": "ast", "id": "app_models_crm_models_crmclue", "community": 39, @@ -20747,7 +20827,7 @@ "label": "CrmClueFollow", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L971", + "source_location": "L990", "_origin": "ast", "id": "app_models_crm_models_crmcluefollow", "community": 94, @@ -20757,7 +20837,7 @@ "label": "CrmPriceLetter", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L995", + "source_location": "L1014", "_origin": "ast", "id": "app_models_crm_models_crmpriceletter", "community": 146, @@ -20767,7 +20847,7 @@ "label": "CrmSupplierInfo", "file_type": "code", "source_file": "app/models/crm_models.py", - "source_location": "L1026", + "source_location": "L1045", "_origin": "ast", "id": "app_models_crm_models_crmsupplierinfo", "community": 112, @@ -20787,9 +20867,9 @@ "label": "CRM-\u8c03\u4ef7\u51fd\u6863\u6848\uff08\u72ec\u7acb\uff0c\u4e0d\u5173\u8054\u5408\u540c/\u62a5\u4ef7\u5355\uff09", "file_type": "rationale", "source_file": "app/models/crm_models.py", - "source_location": "L996", + "source_location": "L1015", "_origin": "ast", - "id": "app_models_crm_models_rationale_996", + "id": "app_models_crm_models_rationale_1015", "community": 146, "norm_label": "crm-\u8c03\u4ef7\u51fd\u6863\u6848(\u72ec\u7acb,\u4e0d\u5173\u8054\u5408\u540c/\u62a5\u4ef7\u5355)" }, @@ -20820,7 +20900,7 @@ "source_location": "L44", "_origin": "ast", "id": "app_models_db_models_dbinboundoutbound", - "community": 48, + "community": 129, "norm_label": "dbinboundoutbound" }, { @@ -20860,7 +20940,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_models_models", - "community": 49, + "community": 24, "norm_label": "models.py" }, { @@ -20870,7 +20950,7 @@ "source_location": "L11", "_origin": "ast", "id": "app_models_models_userrole", - "community": 49, + "community": 24, "norm_label": "userrole" }, { @@ -20880,7 +20960,7 @@ "source_location": "", "_origin": "ast", "id": "str", - "community": 49, + "community": 24, "norm_label": "str" }, { @@ -20910,7 +20990,7 @@ "source_location": "L77", "_origin": "ast", "id": "app_models_models_sysuserrole", - "community": 49, + "community": 92, "norm_label": "sysuserrole" }, { @@ -20920,7 +21000,7 @@ "source_location": "L97", "_origin": "ast", "id": "app_models_models_sysrolemenu", - "community": 49, + "community": 136, "norm_label": "sysrolemenu" }, { @@ -20940,7 +21020,7 @@ "source_location": "L138", "_origin": "ast", "id": "app_models_models_sysmenu", - "community": 49, + "community": 180, "norm_label": "sysmenu" }, { @@ -20970,7 +21050,7 @@ "source_location": "L210", "_origin": "ast", "id": "app_models_models_syssite", - "community": 145, + "community": 70, "norm_label": "syssite" }, { @@ -21010,7 +21090,7 @@ "source_location": "L302", "_origin": "ast", "id": "app_models_models_sysethnic", - "community": 49, + "community": 24, "norm_label": "sysethnic" }, { @@ -21030,7 +21110,7 @@ "source_location": "L354", "_origin": "ast", "id": "app_models_models_sysapirequestlog", - "community": 58, + "community": 24, "norm_label": "sysapirequestlog" }, { @@ -21040,7 +21120,7 @@ "source_location": "L386", "_origin": "ast", "id": "app_models_models_sysapirequestloghis", - "community": 49, + "community": 24, "norm_label": "sysapirequestloghis" }, { @@ -21100,7 +21180,7 @@ "source_location": "L554", "_origin": "ast", "id": "app_models_models_wftransition", - "community": 49, + "community": 13, "norm_label": "wftransition" }, { @@ -21120,7 +21200,7 @@ "source_location": "L601", "_origin": "ast", "id": "app_models_models_wftask", - "community": 13, + "community": 1, "norm_label": "wftask" }, { @@ -21130,7 +21210,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_models_models_rationale_1", - "community": 49, + "community": 24, "norm_label": "\u6570\u636e\u6a21\u578b(\u4e0e docs/sql/shanxia2.0.sql \u5168\u5e93\u5bfc\u51fa\u57fa\u7ebf\u5bf9\u9f50\u7684\u6838\u5fc3\u7cfb\u7edf\u8868)" }, { @@ -21140,7 +21220,7 @@ "source_location": "L12", "_origin": "ast", "id": "app_models_models_rationale_12", - "community": 49, + "community": 24, "norm_label": "web \u7ba1\u7406\u7aef\u7ea6\u5b9a\u89d2\u8272(\u7531 sys_role.role_name \u6620\u5c04\u800c\u6765,\u975e\u6570\u636e\u5e93\u679a\u4e3e)" }, { @@ -21150,7 +21230,7 @@ "source_location": "L78", "_origin": "ast", "id": "app_models_models_rationale_78", - "community": 49, + "community": 92, "norm_label": "\u7528\u6237-\u89d2\u8272\u5173\u8054 sys_user_role(v0.3)" }, { @@ -21160,7 +21240,7 @@ "source_location": "L98", "_origin": "ast", "id": "app_models_models_rationale_98", - "community": 49, + "community": 136, "norm_label": "\u89d2\u8272-\u83dc\u5355\u5173\u8054 sys_role_menu(v0.3)" }, { @@ -21200,7 +21280,7 @@ "source_location": "L303", "_origin": "ast", "id": "app_models_models_rationale_303", - "community": 49, + "community": 24, "norm_label": "\u6c11\u65cf\u7801\u8868 sys_ethnic(\u56fd\u6807 gb/t 3304,\u5168\u5c40)" }, { @@ -21230,7 +21310,7 @@ "source_location": "L555", "_origin": "ast", "id": "app_models_models_rationale_555", - "community": 49, + "community": 13, "norm_label": "\u6d41\u7a0b\u8fde\u7ebf/\u8f6c\u79fb wf_transition" }, { @@ -21250,7 +21330,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_models_pl_models", - "community": 125, + "community": 49, "norm_label": "pl_models.py" }, { @@ -21260,7 +21340,7 @@ "source_location": "L28", "_origin": "ast", "id": "app_models_pl_models_plcarrier", - "community": 2, + "community": 49, "norm_label": "plcarrier" }, { @@ -21270,7 +21350,7 @@ "source_location": "L57", "_origin": "ast", "id": "app_models_pl_models_plvehicle", - "community": 97, + "community": 49, "norm_label": "plvehicle" }, { @@ -21280,7 +21360,7 @@ "source_location": "L83", "_origin": "ast", "id": "app_models_pl_models_plpersonnel", - "community": 131, + "community": 97, "norm_label": "plpersonnel" }, { @@ -21290,7 +21370,7 @@ "source_location": "L117", "_origin": "ast", "id": "app_models_pl_models_pltransportaddress", - "community": 46, + "community": 30, "norm_label": "pltransportaddress" }, { @@ -21300,7 +21380,7 @@ "source_location": "L141", "_origin": "ast", "id": "app_models_pl_models_plcert", - "community": 45, + "community": 97, "norm_label": "plcert" }, { @@ -21320,7 +21400,7 @@ "source_location": "L193", "_origin": "ast", "id": "app_models_pl_models_plvehiclepersonnel", - "community": 131, + "community": 49, "norm_label": "plvehiclepersonnel" }, { @@ -21360,7 +21440,7 @@ "source_location": "L403", "_origin": "ast", "id": "app_models_pl_models_plplanproductbrandqty", - "community": 125, + "community": 49, "norm_label": "plplanproductbrandqty" }, { @@ -21370,7 +21450,7 @@ "source_location": "L425", "_origin": "ast", "id": "app_models_pl_models_plplanchange", - "community": 125, + "community": 49, "norm_label": "plplanchange" }, { @@ -21420,7 +21500,7 @@ "source_location": "L581", "_origin": "ast", "id": "app_models_pl_models_plplantransport", - "community": 6, + "community": 49, "norm_label": "plplantransport" }, { @@ -21430,7 +21510,7 @@ "source_location": "L600", "_origin": "ast", "id": "app_models_pl_models_pltransportsitelink", - "community": 0, + "community": 29, "norm_label": "pltransportsitelink" }, { @@ -21440,7 +21520,7 @@ "source_location": "L633", "_origin": "ast", "id": "app_models_pl_models_plinboundorder", - "community": 125, + "community": 49, "norm_label": "plinboundorder" }, { @@ -21450,7 +21530,7 @@ "source_location": "L663", "_origin": "ast", "id": "app_models_pl_models_plinboundorderitem", - "community": 125, + "community": 49, "norm_label": "plinboundorderitem" }, { @@ -21460,7 +21540,7 @@ "source_location": "L689", "_origin": "ast", "id": "app_models_pl_models_plinboundorderitembrandqty", - "community": 125, + "community": 49, "norm_label": "plinboundorderitembrandqty" }, { @@ -21470,7 +21550,7 @@ "source_location": "L712", "_origin": "ast", "id": "app_models_pl_models_ploutboundorder", - "community": 125, + "community": 49, "norm_label": "ploutboundorder" }, { @@ -21480,7 +21560,7 @@ "source_location": "L742", "_origin": "ast", "id": "app_models_pl_models_ploutboundorderitem", - "community": 125, + "community": 49, "norm_label": "ploutboundorderitem" }, { @@ -21490,7 +21570,7 @@ "source_location": "L768", "_origin": "ast", "id": "app_models_pl_models_ploutboundorderitembrandqty", - "community": 125, + "community": 49, "norm_label": "ploutboundorderitembrandqty" }, { @@ -21500,7 +21580,7 @@ "source_location": "L791", "_origin": "ast", "id": "app_models_pl_models_pltransportapproval", - "community": 25, + "community": 49, "norm_label": "pltransportapproval" }, { @@ -21530,7 +21610,7 @@ "source_location": "L879", "_origin": "ast", "id": "app_models_pl_models_plfreightsettlementtransport", - "community": 28, + "community": 49, "norm_label": "plfreightsettlementtransport" }, { @@ -21540,7 +21620,7 @@ "source_location": "L899", "_origin": "ast", "id": "app_models_pl_models_plremittancevoucher", - "community": 28, + "community": 49, "norm_label": "plremittancevoucher" }, { @@ -21550,7 +21630,7 @@ "source_location": "L926", "_origin": "ast", "id": "app_models_pl_models_plinventory", - "community": 38, + "community": 49, "norm_label": "plinventory" }, { @@ -21660,7 +21740,7 @@ "source_location": "L118", "_origin": "ast", "id": "app_models_pl_models_rationale_118", - "community": 46, + "community": 30, "norm_label": "\u8fd0\u8f93\u901a\u7528\u5730\u5740\u5e93 pl_transport_address" }, { @@ -21680,7 +21760,7 @@ "source_location": "L194", "_origin": "ast", "id": "app_models_pl_models_rationale_194", - "community": 131, + "community": 49, "norm_label": "\u8f66\u8f86-\u4eba\u5458\u5173\u8054\u8868 pl_vehicle_personnel" }, { @@ -21710,7 +21790,7 @@ "source_location": "L404", "_origin": "ast", "id": "app_models_pl_models_rationale_404", - "community": 125, + "community": 49, "norm_label": "\u8ba1\u5212\u4ea7\u54c1\u5f52\u6863\u54c1\u724c\u6570\u91cf pl_plan_product_brand_qty" }, { @@ -21720,7 +21800,7 @@ "source_location": "L426", "_origin": "ast", "id": "app_models_pl_models_rationale_426", - "community": 125, + "community": 49, "norm_label": "\u8ba1\u5212\u53d8\u66f4\u8bb0\u5f55\u8868 pl_plan_change" }, { @@ -21760,7 +21840,7 @@ "source_location": "L582", "_origin": "ast", "id": "app_models_pl_models_rationale_582", - "community": 6, + "community": 49, "norm_label": "\u8ba1\u5212-\u8fd0\u8f93\u5173\u8054\u8868 pl_plan_transport" }, { @@ -21770,7 +21850,7 @@ "source_location": "L601", "_origin": "ast", "id": "app_models_pl_models_rationale_601", - "community": 0, + "community": 29, "norm_label": "\u8fd0\u8f93\u8ba1\u5212\u73b0\u573a\u94fe\u63a5 pl_transport_site_link(\u4e0e\u5730\u78c5\u51fa\u5165\u5e93\u5355\u89e3\u8026)" }, { @@ -21780,7 +21860,7 @@ "source_location": "L634", "_origin": "ast", "id": "app_models_pl_models_rationale_634", - "community": 125, + "community": 49, "norm_label": "\u8fd0\u8f93\u8ba1\u5212-\u5165\u5e93\u5355 pl_inbound_order" }, { @@ -21790,7 +21870,7 @@ "source_location": "L664", "_origin": "ast", "id": "app_models_pl_models_rationale_664", - "community": 125, + "community": 49, "norm_label": "\u8fd0\u8f93\u8ba1\u5212-\u5165\u5e93\u5355\u660e\u7ec6 pl_inbound_order_item" }, { @@ -21800,7 +21880,7 @@ "source_location": "L690", "_origin": "ast", "id": "app_models_pl_models_rationale_690", - "community": 125, + "community": 49, "norm_label": "\u5165\u5e93\u660e\u7ec6\u54c1\u724c\u6570\u91cf pl_inbound_order_item_brand_qty" }, { @@ -21810,7 +21890,7 @@ "source_location": "L713", "_origin": "ast", "id": "app_models_pl_models_rationale_713", - "community": 125, + "community": 49, "norm_label": "\u8fd0\u8f93\u8ba1\u5212-\u51fa\u5e93\u5355 pl_outbound_order" }, { @@ -21820,7 +21900,7 @@ "source_location": "L743", "_origin": "ast", "id": "app_models_pl_models_rationale_743", - "community": 125, + "community": 49, "norm_label": "\u8fd0\u8f93\u8ba1\u5212-\u51fa\u5e93\u5355\u660e\u7ec6 pl_outbound_order_item" }, { @@ -21830,7 +21910,7 @@ "source_location": "L769", "_origin": "ast", "id": "app_models_pl_models_rationale_769", - "community": 125, + "community": 49, "norm_label": "\u51fa\u5e93\u660e\u7ec6\u54c1\u724c\u6570\u91cf pl_outbound_order_item_brand_qty" }, { @@ -21840,7 +21920,7 @@ "source_location": "L792", "_origin": "ast", "id": "app_models_pl_models_rationale_792", - "community": 25, + "community": 49, "norm_label": "\u8fd0\u8f93\u5ba1\u6279\u8bb0\u5f55\u8868 pl_transport_approval" }, { @@ -21870,7 +21950,7 @@ "source_location": "L880", "_origin": "ast", "id": "app_models_pl_models_rationale_880", - "community": 28, + "community": 49, "norm_label": "\u7ed3\u7b97\u5355-\u8fd0\u8f93\u5173\u8054\u8868 pl_freight_settlement_transport" }, { @@ -21880,7 +21960,7 @@ "source_location": "L900", "_origin": "ast", "id": "app_models_pl_models_rationale_900", - "community": 28, + "community": 49, "norm_label": "\u6c47\u6b3e\u51ed\u8bc1\u8868 pl_remittance_voucher" }, { @@ -22960,7 +23040,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_clue", - "community": 67, + "community": 64, "norm_label": "clue.py" }, { @@ -22980,7 +23060,7 @@ "source_location": "L43", "_origin": "ast", "id": "app_schemas_crm_clue_cluecreatebody", - "community": 67, + "community": 64, "norm_label": "cluecreatebody" }, { @@ -22990,7 +23070,7 @@ "source_location": "L74", "_origin": "ast", "id": "app_schemas_crm_clue_clueupdatebody", - "community": 67, + "community": 64, "norm_label": "clueupdatebody" }, { @@ -23000,7 +23080,7 @@ "source_location": "L81", "_origin": "ast", "id": "app_schemas_crm_clue_cluedeletebody", - "community": 67, + "community": 64, "norm_label": "cluedeletebody" }, { @@ -23010,7 +23090,7 @@ "source_location": "L87", "_origin": "ast", "id": "app_schemas_crm_clue_clueassignbody", - "community": 67, + "community": 64, "norm_label": "clueassignbody" }, { @@ -23020,7 +23100,7 @@ "source_location": "L95", "_origin": "ast", "id": "app_schemas_crm_clue_clueconvertbody", - "community": 67, + "community": 64, "norm_label": "clueconvertbody" }, { @@ -23030,7 +23110,7 @@ "source_location": "L106", "_origin": "ast", "id": "app_schemas_crm_clue_cluestatusbody", - "community": 67, + "community": 64, "norm_label": "cluestatusbody" }, { @@ -23040,7 +23120,7 @@ "source_location": "L113", "_origin": "ast", "id": "app_schemas_crm_clue_cluelevelbody", - "community": 67, + "community": 64, "norm_label": "cluelevelbody" }, { @@ -23050,7 +23130,7 @@ "source_location": "L120", "_origin": "ast", "id": "app_schemas_crm_clue_clueinvalidbody", - "community": 67, + "community": 64, "norm_label": "clueinvalidbody" }, { @@ -23060,7 +23140,7 @@ "source_location": "L131", "_origin": "ast", "id": "app_schemas_crm_clue_cluefollowlistbody", - "community": 67, + "community": 64, "norm_label": "cluefollowlistbody" }, { @@ -23070,7 +23150,7 @@ "source_location": "L139", "_origin": "ast", "id": "app_schemas_crm_clue_cluefollowcreatebody", - "community": 67, + "community": 64, "norm_label": "cluefollowcreatebody" }, { @@ -23080,7 +23160,7 @@ "source_location": "L150", "_origin": "ast", "id": "app_schemas_crm_clue_cluefollowdeletebody", - "community": 67, + "community": 64, "norm_label": "cluefollowdeletebody" }, { @@ -23090,7 +23170,7 @@ "source_location": "L156", "_origin": "ast", "id": "app_schemas_crm_clue_cluefollowupdatebody", - "community": 67, + "community": 64, "norm_label": "cluefollowupdatebody" }, { @@ -23110,7 +23190,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_clue_rationale_1", - "community": 67, + "community": 64, "norm_label": "crm \u7ebf\u7d22\u7ba1\u7406 pydantic schemas" }, { @@ -23410,7 +23490,7 @@ "source_location": "L233", "_origin": "ast", "id": "app_schemas_crm_contract_contractapprovalpassbody", - "community": 150, + "community": 83, "norm_label": "contractapprovalpassbody" }, { @@ -23420,7 +23500,7 @@ "source_location": "L238", "_origin": "ast", "id": "app_schemas_crm_contract_contractapprovalrejectbody", - "community": 150, + "community": 83, "norm_label": "contractapprovalrejectbody" }, { @@ -23430,7 +23510,7 @@ "source_location": "L243", "_origin": "ast", "id": "app_schemas_crm_contract_contractapprovalrefreshnamesbody", - "community": 24, + "community": 83, "norm_label": "contractapprovalrefreshnamesbody" }, { @@ -23440,7 +23520,7 @@ "source_location": "L247", "_origin": "ast", "id": "app_schemas_crm_contract_contractapprovallistquery", - "community": 24, + "community": 83, "norm_label": "contractapprovallistquery" }, { @@ -23450,7 +23530,7 @@ "source_location": "L259", "_origin": "ast", "id": "app_schemas_crm_contract_contractchangelistquery", - "community": 24, + "community": 83, "norm_label": "contractchangelistquery" }, { @@ -23460,7 +23540,7 @@ "source_location": "L271", "_origin": "ast", "id": "app_schemas_crm_contract_contracttemplatelistquery", - "community": 24, + "community": 83, "norm_label": "contracttemplatelistquery" }, { @@ -23510,7 +23590,7 @@ "source_location": "L314", "_origin": "ast", "id": "app_schemas_crm_contract_contractchangesubmitbody", - "community": 150, + "community": 83, "norm_label": "contractchangesubmitbody" }, { @@ -23520,7 +23600,7 @@ "source_location": "L320", "_origin": "ast", "id": "app_schemas_crm_contract_contractchangeexportbody", - "community": 24, + "community": 83, "norm_label": "contractchangeexportbody" }, { @@ -23530,7 +23610,7 @@ "source_location": "L324", "_origin": "ast", "id": "app_schemas_crm_contract_contracttemplatecreatebody", - "community": 150, + "community": 83, "norm_label": "contracttemplatecreatebody" }, { @@ -23540,7 +23620,7 @@ "source_location": "L346", "_origin": "ast", "id": "app_schemas_crm_contract_contracttemplateupdatebody", - "community": 150, + "community": 83, "norm_label": "contracttemplateupdatebody" }, { @@ -23550,7 +23630,7 @@ "source_location": "L350", "_origin": "ast", "id": "app_schemas_crm_contract_contracttemplateexportbody", - "community": 24, + "community": 83, "norm_label": "contracttemplateexportbody" }, { @@ -23560,7 +23640,7 @@ "source_location": "L354", "_origin": "ast", "id": "app_schemas_crm_contract_contractapprovaltransferbody", - "community": 150, + "community": 83, "norm_label": "contractapprovaltransferbody" }, { @@ -23570,7 +23650,7 @@ "source_location": "L360", "_origin": "ast", "id": "app_schemas_crm_contract_contractapprovalexportbody", - "community": 24, + "community": 83, "norm_label": "contractapprovalexportbody" }, { @@ -23623,6 +23703,26 @@ "community": 150, "norm_label": "\u7eed\u7b7e \u2014 \u5b57\u6bb5\u540c\u521b\u5efa,parent \u7531\u8def\u5f84\u63d0\u4f9b" }, + { + "label": "contract_approver_setting.py", + "file_type": "code", + "source_file": "app/schemas/crm/contract_approver_setting.py", + "source_location": "L1", + "_origin": "ast", + "id": "app_schemas_crm_contract_approver_setting", + "community": 150, + "norm_label": "contract_approver_setting.py" + }, + { + "label": "ContractApproverSettingSaveBody", + "file_type": "code", + "source_file": "app/schemas/crm/contract_approver_setting.py", + "source_location": "L6", + "_origin": "ast", + "id": "app_schemas_crm_contract_approver_setting_contractapproversettingsavebody", + "community": 150, + "norm_label": "contractapproversettingsavebody" + }, { "label": "customer.py", "file_type": "code", @@ -23640,7 +23740,7 @@ "source_location": "L12", "_origin": "ast", "id": "app_schemas_crm_customer_customerlistbody", - "community": 156, + "community": 64, "norm_label": "customerlistbody" }, { @@ -23650,7 +23750,7 @@ "source_location": "L39", "_origin": "ast", "id": "app_schemas_crm_customer_customerlistbody_to_list_kwargs", - "community": 156, + "community": 64, "norm_label": ".to_list_kwargs()" }, { @@ -23790,7 +23890,7 @@ "source_location": "L40", "_origin": "ast", "id": "app_schemas_crm_customer_rationale_40", - "community": 156, + "community": 64, "norm_label": "\u89e3\u6790\u5217\u8868\u67e5\u8be2\u53c2\u6570,\u4f9b api \u4e0e crud \u5171\u7528\u3002" }, { @@ -23800,7 +23900,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_customer_follow", - "community": 64, + "community": 12, "norm_label": "customer_follow.py" }, { @@ -23810,7 +23910,7 @@ "source_location": "L8", "_origin": "ast", "id": "app_schemas_crm_customer_follow_customerfollowlistbody", - "community": 64, + "community": 12, "norm_label": "customerfollowlistbody" }, { @@ -23820,7 +23920,7 @@ "source_location": "L21", "_origin": "ast", "id": "app_schemas_crm_customer_follow_customerfollowcreatebody", - "community": 64, + "community": 12, "norm_label": "customerfollowcreatebody" }, { @@ -23830,7 +23930,7 @@ "source_location": "L36", "_origin": "ast", "id": "app_schemas_crm_customer_follow_customerfollowupdatebody", - "community": 64, + "community": 12, "norm_label": "customerfollowupdatebody" }, { @@ -23840,7 +23940,7 @@ "source_location": "L52", "_origin": "ast", "id": "app_schemas_crm_customer_follow_customerfollowdeletebody", - "community": 64, + "community": 12, "norm_label": "customerfollowdeletebody" }, { @@ -23850,7 +23950,7 @@ "source_location": "L56", "_origin": "ast", "id": "app_schemas_crm_customer_follow_customerfollowdetailbody", - "community": 64, + "community": 12, "norm_label": "customerfollowdetailbody" }, { @@ -23860,7 +23960,7 @@ "source_location": "L60", "_origin": "ast", "id": "app_schemas_crm_customer_follow_customerfollowbycustomerbody", - "community": 64, + "community": 12, "norm_label": "customerfollowbycustomerbody" }, { @@ -23870,7 +23970,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_customer_follow_rationale_1", - "community": 64, + "community": 12, "norm_label": "crm \u5ba2\u6237\u8ddf\u8fdb\u8bb0\u5f55 pydantic schemas" }, { @@ -23880,7 +23980,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_customer_pool", - "community": 64, + "community": 12, "norm_label": "customer_pool.py" }, { @@ -23890,7 +23990,7 @@ "source_location": "L7", "_origin": "ast", "id": "app_schemas_crm_customer_pool_poolcustomerlistbody", - "community": 64, + "community": 12, "norm_label": "poolcustomerlistbody" }, { @@ -23900,7 +24000,7 @@ "source_location": "L18", "_origin": "ast", "id": "app_schemas_crm_customer_pool_poolassignbody", - "community": 64, + "community": 12, "norm_label": "poolassignbody" }, { @@ -23910,7 +24010,7 @@ "source_location": "L26", "_origin": "ast", "id": "app_schemas_crm_customer_pool_poolclaimbody", - "community": 64, + "community": 12, "norm_label": "poolclaimbody" }, { @@ -23920,7 +24020,7 @@ "source_location": "L32", "_origin": "ast", "id": "app_schemas_crm_customer_pool_poolrecordlistbody", - "community": 64, + "community": 12, "norm_label": "poolrecordlistbody" }, { @@ -23930,7 +24030,7 @@ "source_location": "L42", "_origin": "ast", "id": "app_schemas_crm_customer_pool_poolrecorddetailbody", - "community": 64, + "community": 12, "norm_label": "poolrecorddetailbody" }, { @@ -23940,7 +24040,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_customer_pool_rationale_1", - "community": 64, + "community": 12, "norm_label": "crm \u5ba2\u6237\u516c\u6d77\u6c60\u8bb0\u5f55 pydantic schemas" }, { @@ -23950,7 +24050,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_invoice_info", - "community": 64, + "community": 107, "norm_label": "invoice_info.py" }, { @@ -23960,7 +24060,7 @@ "source_location": "L8", "_origin": "ast", "id": "app_schemas_crm_invoice_info_invoiceinfobycustomerbody", - "community": 64, + "community": 107, "norm_label": "invoiceinfobycustomerbody" }, { @@ -23970,7 +24070,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_schemas_crm_invoice_info_invoiceinfocreatebody", - "community": 64, + "community": 107, "norm_label": "invoiceinfocreatebody" }, { @@ -23980,7 +24080,7 @@ "source_location": "L30", "_origin": "ast", "id": "app_schemas_crm_invoice_info_invoiceinfoupdatebody", - "community": 64, + "community": 107, "norm_label": "invoiceinfoupdatebody" }, { @@ -23990,7 +24090,7 @@ "source_location": "L47", "_origin": "ast", "id": "app_schemas_crm_invoice_info_invoiceinfodeletebody", - "community": 64, + "community": 107, "norm_label": "invoiceinfodeletebody" }, { @@ -24000,7 +24100,7 @@ "source_location": "L52", "_origin": "ast", "id": "app_schemas_crm_invoice_info_invoiceinfosetdefaultbody", - "community": 64, + "community": 107, "norm_label": "invoiceinfosetdefaultbody" }, { @@ -24010,7 +24110,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_crm_invoice_info_rationale_1", - "community": 64, + "community": 107, "norm_label": "crm \u5ba2\u6237\u5f00\u7968\u4fe1\u606f pydantic schemas" }, { @@ -24030,7 +24130,7 @@ "source_location": "L8", "_origin": "ast", "id": "app_schemas_crm_opportunity_opportunitylistbody", - "community": 64, + "community": 159, "norm_label": "opportunitylistbody" }, { @@ -24160,7 +24260,7 @@ "source_location": "L144", "_origin": "ast", "id": "app_schemas_crm_opportunity_opportunitykanbanbody", - "community": 64, + "community": 159, "norm_label": "opportunitykanbanbody" }, { @@ -25610,7 +25710,7 @@ "source_location": "L158", "_origin": "ast", "id": "app_schemas_pl_base_data_certread", - "community": 45, + "community": 97, "norm_label": "certread" }, { @@ -25670,7 +25770,7 @@ "source_location": "L233", "_origin": "ast", "id": "app_schemas_pl_base_data_personnelbase", - "community": 45, + "community": 97, "norm_label": "personnelbase" }, { @@ -25680,7 +25780,7 @@ "source_location": "L254", "_origin": "ast", "id": "app_schemas_pl_base_data_personnelcreate", - "community": 45, + "community": 97, "norm_label": "personnelcreate" }, { @@ -25700,7 +25800,7 @@ "source_location": "L274", "_origin": "ast", "id": "app_schemas_pl_base_data_personnelread", - "community": 45, + "community": 97, "norm_label": "personnelread" }, { @@ -25710,7 +25810,7 @@ "source_location": "L289", "_origin": "ast", "id": "app_schemas_pl_base_data_personneldetailread", - "community": 45, + "community": 97, "norm_label": "personneldetailread" }, { @@ -25780,7 +25880,7 @@ "source_location": "L360", "_origin": "ast", "id": "app_schemas_pl_base_data_vehicledriverread", - "community": 97, + "community": 14, "norm_label": "vehicledriverread" }, { @@ -26270,7 +26370,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_pl_io_order", - "community": 125, + "community": 54, "norm_label": "io_order.py" }, { @@ -26300,7 +26400,7 @@ "source_location": "L24", "_origin": "ast", "id": "app_schemas_pl_io_order_ioorderitemread", - "community": 125, + "community": 54, "norm_label": "ioorderitemread" }, { @@ -26310,7 +26410,7 @@ "source_location": "L51", "_origin": "ast", "id": "app_schemas_pl_io_order_ioorderitempatch", - "community": 125, + "community": 54, "norm_label": "ioorderitempatch" }, { @@ -26350,7 +26450,7 @@ "source_location": "L111", "_origin": "ast", "id": "app_schemas_pl_io_order_publicioorderitemfeedback", - "community": 125, + "community": 54, "norm_label": "publicioorderitemfeedback" }, { @@ -26360,7 +26460,7 @@ "source_location": "L118", "_origin": "ast", "id": "app_schemas_pl_io_order_publicioorderfeedback", - "community": 125, + "community": 54, "norm_label": "publicioorderfeedback" }, { @@ -26370,7 +26470,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_pl_io_order_rationale_1", - "community": 125, + "community": 54, "norm_label": "\u5165\u5e93\u5355 / \u51fa\u5e93\u5355 pydantic schemas" }, { @@ -26500,7 +26600,7 @@ "source_location": "L53", "_origin": "ast", "id": "app_schemas_pl_plan_planproductupdate", - "community": 128, + "community": 14, "norm_label": "planproductupdate" }, { @@ -27100,7 +27200,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_schemas_pl_transport_address", - "community": 46, + "community": 30, "norm_label": "transport_address.py" }, { @@ -27110,7 +27210,7 @@ "source_location": "L9", "_origin": "ast", "id": "app_schemas_pl_transport_address_transportaddressbase", - "community": 46, + "community": 30, "norm_label": "transportaddressbase" }, { @@ -27120,7 +27220,7 @@ "source_location": "L22", "_origin": "ast", "id": "app_schemas_pl_transport_address_transportaddresscreate", - "community": 46, + "community": 30, "norm_label": "transportaddresscreate" }, { @@ -27130,7 +27230,7 @@ "source_location": "L24", "_origin": "ast", "id": "app_schemas_pl_transport_address_transportaddresscreate_validate_coordinates", - "community": 46, + "community": 30, "norm_label": ".validate_coordinates()" }, { @@ -27140,7 +27240,7 @@ "source_location": "L30", "_origin": "ast", "id": "app_schemas_pl_transport_address_transportaddressupdate", - "community": 46, + "community": 30, "norm_label": "transportaddressupdate" }, { @@ -27150,7 +27250,7 @@ "source_location": "L43", "_origin": "ast", "id": "app_schemas_pl_transport_address_transportaddressread", - "community": 46, + "community": 30, "norm_label": "transportaddressread" }, { @@ -27160,7 +27260,7 @@ "source_location": "L57", "_origin": "ast", "id": "app_schemas_pl_transport_address_transportaddresslistresponse", - "community": 46, + "community": 30, "norm_label": "transportaddresslistresponse" }, { @@ -27550,7 +27650,7 @@ "source_location": "L61", "_origin": "ast", "id": "app_schemas_pl_vehicle_urea_vehicleureaapplylistresponse", - "community": 107, + "community": 11, "norm_label": "vehicleureaapplylistresponse" }, { @@ -27620,7 +27720,7 @@ "source_location": "L144", "_origin": "ast", "id": "app_schemas_pl_vehicle_urea_vehicleureadisburseboardlistresponse", - "community": 107, + "community": 11, "norm_label": "vehicleureadisburseboardlistresponse" }, { @@ -29920,7 +30020,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_crm_supplier_hazard_py_session", - "community": 173, + "community": 21, "norm_label": "session" }, { @@ -29930,7 +30030,7 @@ "source_location": "L50", "_origin": "ast", "id": "app_services_crm_supplier_hazard_enrich_products_with_hazard_flags", - "community": 173, + "community": 21, "norm_label": "enrich_products_with_hazard_flags()" }, { @@ -29940,7 +30040,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_crm_supplier_hazard_py_any", - "community": 173, + "community": 21, "norm_label": "any" }, { @@ -29950,7 +30050,7 @@ "source_location": "L83", "_origin": "ast", "id": "app_services_crm_supplier_hazard_assert_products_allowed_for_supplier", - "community": 173, + "community": 21, "norm_label": "assert_products_allowed_for_supplier()" }, { @@ -29960,7 +30060,7 @@ "source_location": "L54", "_origin": "ast", "id": "app_services_crm_supplier_hazard_rationale_54", - "community": 173, + "community": 21, "norm_label": "\u6279\u91cf\u56de\u586b\u660e\u7ec6\u884c istoxic/isexplosive(\u6765\u81ea\u4ea7\u54c1\u4e3b\u6570\u636e,\u4f9b\u524d\u7aef\u5207\u6362\u4e3b\u4f53\u5254\u9664)\u3002" }, { @@ -30150,7 +30250,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_db_mappers", - "community": 159, + "community": 86, "norm_label": "mappers.py" }, { @@ -30160,7 +30260,7 @@ "source_location": "L17", "_origin": "ast", "id": "app_services_db_mappers_fmt_date", - "community": 159, + "community": 86, "norm_label": "fmt_date()" }, { @@ -30170,7 +30270,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_db_mappers_py_date", - "community": 159, + "community": 86, "norm_label": "date" }, { @@ -30180,7 +30280,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_db_mappers_py_datetime", - "community": 159, + "community": 86, "norm_label": "datetime" }, { @@ -30190,7 +30290,7 @@ "source_location": "L27", "_origin": "ast", "id": "app_services_db_mappers_fmt_datetime", - "community": 159, + "community": 86, "norm_label": "fmt_datetime()" }, { @@ -30220,7 +30320,7 @@ "source_location": "L77", "_origin": "ast", "id": "app_services_db_mappers_is_empty_inventory_date", - "community": 159, + "community": 86, "norm_label": "is_empty_inventory_date()" }, { @@ -30230,7 +30330,7 @@ "source_location": "L81", "_origin": "ast", "id": "app_services_db_mappers_inventory_date_to_api", - "community": 159, + "community": 86, "norm_label": "inventory_date_to_api()" }, { @@ -30240,7 +30340,7 @@ "source_location": "L87", "_origin": "ast", "id": "app_services_db_mappers_parse_site_feedback_images", - "community": 159, + "community": 86, "norm_label": "_parse_site_feedback_images()" }, { @@ -30270,7 +30370,7 @@ "source_location": "L184", "_origin": "ast", "id": "app_services_db_mappers_datetime_end_of_day", - "community": 159, + "community": 86, "norm_label": "datetime_end_of_day()" }, { @@ -30300,7 +30400,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_db_mappers_rationale_1", - "community": 159, + "community": 86, "norm_label": "\u5730\u78c5 orm \u2192 api read \u6a21\u578b\u6620\u5c04\u3002" }, { @@ -30510,7 +30610,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_db_data_scope", - "community": 86, + "community": 48, "norm_label": "db_data_scope.py" }, { @@ -30520,7 +30620,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_services_db_data_scope_apply_db_scope", - "community": 86, + "community": 127, "norm_label": "apply_db_scope()" }, { @@ -30530,7 +30630,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_db_data_scope_py_session", - "community": 86, + "community": 127, "norm_label": "session" }, { @@ -30540,7 +30640,7 @@ "source_location": "L19", "_origin": "ast", "id": "app_services_db_data_scope_assert_db_row_in_scope", - "community": 86, + "community": 48, "norm_label": "assert_db_row_in_scope()" }, { @@ -30550,7 +30650,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_db_data_scope_rationale_1", - "community": 86, + "community": 48, "norm_label": "db \u5730\u78c5\u6a21\u5757\u6570\u636e\u6743\u9650\u8f85\u52a9(create_by / create_dept_id)\u3002" }, { @@ -30910,7 +31010,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_pl_cert_service", - "community": 45, + "community": 97, "norm_label": "pl_cert_service.py" }, { @@ -30920,7 +31020,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_services_pl_cert_service_list_owner_certs", - "community": 45, + "community": 97, "norm_label": "list_owner_certs()" }, { @@ -30930,7 +31030,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_pl_cert_service_py_session", - "community": 45, + "community": 97, "norm_label": "session" }, { @@ -30940,7 +31040,7 @@ "source_location": "L30", "_origin": "ast", "id": "app_services_pl_cert_service_list_owner_certs_batch", - "community": 45, + "community": 97, "norm_label": "list_owner_certs_batch()" }, { @@ -30950,7 +31050,7 @@ "source_location": "L52", "_origin": "ast", "id": "app_services_pl_cert_service_certs_to_read", - "community": 45, + "community": 97, "norm_label": "certs_to_read()" }, { @@ -30960,7 +31060,7 @@ "source_location": "L74", "_origin": "ast", "id": "app_services_pl_cert_service_normalize_cert_row", - "community": 45, + "community": 97, "norm_label": "_normalize_cert_row()" }, { @@ -30970,7 +31070,7 @@ "source_location": "L80", "_origin": "ast", "id": "app_services_pl_cert_service_save_owner_certs", - "community": 45, + "community": 97, "norm_label": "save_owner_certs()" }, { @@ -30980,7 +31080,7 @@ "source_location": "L138", "_origin": "ast", "id": "app_services_pl_cert_service_nearest_expire_date", - "community": 45, + "community": 97, "norm_label": "nearest_expire_date()" }, { @@ -30990,7 +31090,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_pl_cert_service_py_date", - "community": 45, + "community": 97, "norm_label": "date" }, { @@ -31000,7 +31100,7 @@ "source_location": "L156", "_origin": "ast", "id": "app_services_pl_cert_service_resolve_owner_label", - "community": 45, + "community": 97, "norm_label": "_resolve_owner_label()" }, { @@ -31010,7 +31110,7 @@ "source_location": "L183", "_origin": "ast", "id": "app_services_pl_cert_service_scan_cert_expiry", - "community": 45, + "community": 97, "norm_label": "scan_cert_expiry()" }, { @@ -31020,7 +31120,7 @@ "source_location": "L90", "_origin": "ast", "id": "app_services_pl_cert_service_rationale_90", - "community": 45, + "community": 97, "norm_label": "\u6309 cert_id upsert;\u672a\u51fa\u73b0\u5728\u5217\u8868\u4e2d\u7684\u65e7\u8bc1\u8f6f\u5220\u3002" }, { @@ -31030,7 +31130,7 @@ "source_location": "L184", "_origin": "ast", "id": "app_services_pl_cert_service_rationale_184", - "community": 45, + "community": 97, "norm_label": "\u626b\u63cf pl_cert \u751f\u6210\u5230\u671f\u63d0\u9192,\u8fd4\u56de\u65b0\u5efa\u6761\u6570\u3002" }, { @@ -31040,7 +31140,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_pl_data_scope", - "community": 164, + "community": 14, "norm_label": "pl_data_scope.py" }, { @@ -31050,7 +31150,7 @@ "source_location": "L14", "_origin": "ast", "id": "app_services_pl_data_scope_apply_pl_scope", - "community": 164, + "community": 14, "norm_label": "apply_pl_scope()" }, { @@ -31060,7 +31160,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_pl_data_scope_py_session", - "community": 164, + "community": 14, "norm_label": "session" }, { @@ -31080,7 +31180,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_pl_data_scope_rationale_1", - "community": 164, + "community": 14, "norm_label": "pl \u6a21\u5757\u6570\u636e\u6743\u9650\u8f85\u52a9(create_by / create_dept_id,\u65e0 owner_field)\u3002" }, { @@ -31110,7 +31210,7 @@ "source_location": "L36", "_origin": "ast", "id": "app_services_pl_dibang_bridge_service_resolve_partner_company", - "community": 29, + "community": 125, "norm_label": "resolve_partner_company()" }, { @@ -31310,7 +31410,7 @@ "source_location": "L485", "_origin": "ast", "id": "app_services_pl_dibang_bridge_service_sync_dibang_for_transport", - "community": 25, + "community": 61, "norm_label": "sync_dibang_for_transport()" }, { @@ -31320,7 +31420,7 @@ "source_location": "L37", "_origin": "ast", "id": "app_services_pl_dibang_bridge_service_rationale_37", - "community": 29, + "community": 125, "norm_label": "\u6309\u8fd0\u8f93\u8ba1\u5212\u5355\u636e\u7c7b\u578b\u89e3\u6790\u5730\u78c5\u5f80\u6765\u5355\u4f4d(\u4e0d\u533a\u5206 crm \u5408\u540c\u7c7b\u578b)\u3002 - \u5165\u5e93\u5355 inbound:\u4f9b\u65b9 \u2192 party_a,\u5176\u6b21 supplier_nam" }, { @@ -31350,7 +31450,7 @@ "source_location": "L495", "_origin": "ast", "id": "app_services_pl_dibang_bridge_service_rationale_495", - "community": 25, + "community": 61, "norm_label": "\u52fe\u9009\u300c\u751f\u6210\u5730\u78c5\u5355\u300d:\u6309\u4ea7\u54c1\u751f\u6210/\u590d\u7528\u5730\u78c5\u8ba1\u5212,\u5e76\u521b\u5efa\u5173\u8054\u51fa\u5165\u5e93\u5355\u3002" }, { @@ -32140,7 +32240,7 @@ "source_location": "L45", "_origin": "ast", "id": "app_services_pl_io_order_service_ioordercreateresult", - "community": 125, + "community": 49, "norm_label": "ioordercreateresult" }, { @@ -32460,7 +32560,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_pl_menu_badge_service", - "community": 164, + "community": 14, "norm_label": "pl_menu_badge_service.py" }, { @@ -32470,7 +32570,7 @@ "source_location": "L44", "_origin": "ast", "id": "app_services_pl_menu_badge_service_count_pending_applies", - "community": 164, + "community": 14, "norm_label": "_count_pending_applies()" }, { @@ -32480,7 +32580,7 @@ "source_location": "", "_origin": "ast", "id": "app_services_pl_menu_badge_service_py_session", - "community": 164, + "community": 14, "norm_label": "session" }, { @@ -32490,7 +32590,7 @@ "source_location": "L54", "_origin": "ast", "id": "app_services_pl_menu_badge_service_count_document_reminder_expired_pending", - "community": 164, + "community": 14, "norm_label": "count_document_reminder_expired_pending()" }, { @@ -32500,7 +32600,7 @@ "source_location": "L67", "_origin": "ast", "id": "app_services_pl_menu_badge_service_count_freight_approval_pending", - "community": 164, + "community": 14, "norm_label": "count_freight_approval_pending()" }, { @@ -32510,7 +32610,7 @@ "source_location": "L86", "_origin": "ast", "id": "app_services_pl_menu_badge_service_count_plan_cert_pending", - "community": 164, + "community": 14, "norm_label": "count_plan_cert_pending()" }, { @@ -32520,7 +32620,7 @@ "source_location": "L120", "_origin": "ast", "id": "app_services_pl_menu_badge_service_count_plan_archive_pending", - "community": 164, + "community": 14, "norm_label": "count_plan_archive_pending()" }, { @@ -32530,7 +32630,7 @@ "source_location": "L131", "_origin": "ast", "id": "app_services_pl_menu_badge_service_count_freight_disburse_pending", - "community": 164, + "community": 14, "norm_label": "count_freight_disburse_pending()" }, { @@ -32540,7 +32640,7 @@ "source_location": "L141", "_origin": "ast", "id": "app_services_pl_menu_badge_service_build_menu_badge_counts", - "community": 164, + "community": 14, "norm_label": "build_menu_badge_counts()" }, { @@ -32810,7 +32910,7 @@ "source_location": "L68", "_origin": "ast", "id": "app_services_pl_paste_recognize_service_get_personnel", - "community": 131, + "community": 97, "norm_label": "_get_personnel()" }, { @@ -33070,7 +33170,7 @@ "source_location": "L100", "_origin": "ast", "id": "app_services_pl_plan_service_build_plan_product", - "community": 128, + "community": 6, "norm_label": "build_plan_product()" }, { @@ -33120,7 +33220,7 @@ "source_location": "L234", "_origin": "ast", "id": "app_services_pl_plan_service_fetch_hazard_flags_map", - "community": 6, + "community": 128, "norm_label": "fetch_hazard_flags_map()" }, { @@ -33150,7 +33250,7 @@ "source_location": "L296", "_origin": "ast", "id": "app_services_pl_plan_service_collect_hazard_product_ids", - "community": 6, + "community": 128, "norm_label": "collect_hazard_product_ids()" }, { @@ -33330,7 +33430,7 @@ "source_location": "L1001", "_origin": "ast", "id": "app_services_pl_plan_service_validate_create_full", - "community": 128, + "community": 6, "norm_label": "validate_create_full()" }, { @@ -33410,7 +33510,7 @@ "source_location": "L1353", "_origin": "ast", "id": "app_services_pl_plan_service_apply_plan_site_feedback", - "community": 128, + "community": 6, "norm_label": "apply_plan_site_feedback()" }, { @@ -33420,7 +33520,7 @@ "source_location": "L239", "_origin": "ast", "id": "app_services_pl_plan_service_rationale_239", - "community": 6, + "community": 128, "norm_label": "\u6279\u91cf\u4ece crm \u4ea7\u54c1\u4e3b\u6570\u636e\u8bfb\u53d6\u6613\u5236\u6bd2/\u6613\u5236\u7206\u6807\u8bc6\u3002" }, { @@ -33780,7 +33880,7 @@ "source_location": "L43", "_origin": "ast", "id": "app_services_pl_transport_site_service_revoke_site_links_for_transport", - "community": 29, + "community": 128, "norm_label": "revoke_site_links_for_transport()" }, { @@ -34840,7 +34940,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_workflow_callback", - "community": 49, + "community": 1, "norm_label": "workflow_callback.py" }, { @@ -34850,7 +34950,7 @@ "source_location": "L23", "_origin": "ast", "id": "app_services_workflow_callback_register_local_callback", - "community": 49, + "community": 1, "norm_label": "register_local_callback()" }, { @@ -34860,7 +34960,7 @@ "source_location": "", "_origin": "ast", "id": "localcallbackfn", - "community": 49, + "community": 1, "norm_label": "_localcallbackfn" }, { @@ -34900,7 +35000,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_workflow_callback_rationale_1", - "community": 49, + "community": 1, "norm_label": "\u5de5\u4f5c\u6d41\u56de\u8c03\u670d\u52a1 \u2014\u2014 \u6d41\u7a0b\u72b6\u6001\u53d8\u66f4\u65f6\u901a\u77e5\u4e1a\u52a1\u7cfb\u7edf" }, { @@ -34910,7 +35010,7 @@ "source_location": "L24", "_origin": "ast", "id": "app_services_workflow_callback_rationale_24", - "community": 49, + "community": 1, "norm_label": "\u6ce8\u518c\u672c\u5730\u56de\u8c03\u51fd\u6570\u3002\u5f53 callback_url \u4ee5 path \u5f00\u5934\u65f6\u76f4\u63a5\u8c03\u7528 fn\u3002" }, { @@ -34940,7 +35040,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_workflow_engine", - "community": 49, + "community": 1, "norm_label": "workflow_engine.py" }, { @@ -35110,7 +35210,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_services_workflow_engine_rationale_1", - "community": 49, + "community": 1, "norm_label": "\u5de5\u4f5c\u6d41\u5f15\u64ce \u2014\u2014 \u8bfb\u53d6\u8282\u70b9\u4e0e\u8fde\u7ebf\u6267\u884c\u5ba1\u6279\u6d41\u8f6c" }, { @@ -35270,7 +35370,7 @@ "source_location": "L1", "_origin": "ast", "id": "app_tasks_pl_cert_expiry", - "community": 154, + "community": 97, "norm_label": "pl_cert_expiry.py" }, { @@ -35280,7 +35380,7 @@ "source_location": "L10", "_origin": "ast", "id": "app_tasks_pl_cert_expiry_scan_pl_cert_expiry_job", - "community": 154, + "community": 97, "norm_label": "scan_pl_cert_expiry_job()" }, { @@ -35290,7 +35390,7 @@ "source_location": "L11", "_origin": "ast", "id": "app_tasks_pl_cert_expiry_rationale_11", - "community": 154, + "community": 97, "norm_label": "\u6bcf\u65e5\u626b\u63cf pl_cert,\u751f\u6210\u8bc1\u4ef6\u5230\u671f\u63d0\u9192\u3002" }, { @@ -35630,7 +35730,7 @@ "source_location": "L27", "_origin": "ast", "id": "app_utils_excel_export_load_dict_label_maps", - "community": 0, + "community": 101, "norm_label": "load_dict_label_maps()" }, { @@ -35640,7 +35740,7 @@ "source_location": "", "_origin": "ast", "id": "app_utils_excel_export_py_session", - "community": 0, + "community": 101, "norm_label": "session" }, { @@ -35660,7 +35760,7 @@ "source_location": "L59", "_origin": "ast", "id": "app_utils_excel_export_dictlabelresolver_init", - "community": 0, + "community": 101, "norm_label": ".__init__()" }, { @@ -35760,7 +35860,7 @@ "source_location": "L32", "_origin": "ast", "id": "app_utils_excel_export_rationale_32", - "community": 0, + "community": 101, "norm_label": "\u9884\u52a0\u8f7d\u591a\u4e2a\u5b57\u5178\u7c7b\u578b\u7684 value\u2192label \u6620\u5c04(\u5355\u6b21\u67e5\u8be2,\u907f\u514d n+1)\u3002" }, { @@ -36910,7 +37010,7 @@ "source_location": "L166", "_origin": "ast", "id": "scripts_migrate_crm_contract_normalize_attachment_csv", - "community": 42, + "community": 145, "norm_label": "normalize_attachment_csv()" }, { @@ -38630,7 +38730,7 @@ "source_location": "L176", "_origin": "ast", "id": "scripts_migrate_crm_quote_normalize_attachment_csv", - "community": 88, + "community": 145, "norm_label": "normalize_attachment_csv()" }, { @@ -39690,7 +39790,7 @@ "source_location": "L1", "_origin": "ast", "id": "scripts_migration_minio_url", - "community": 132, + "community": 145, "norm_label": "minio_url.py" }, { @@ -39700,7 +39800,7 @@ "source_location": "L39", "_origin": "ast", "id": "scripts_migration_minio_url_strip_url_query", - "community": 132, + "community": 145, "norm_label": "strip_url_query()" }, { @@ -39710,7 +39810,7 @@ "source_location": "L47", "_origin": "ast", "id": "scripts_migration_minio_url_strip_legacy_prefix", - "community": 132, + "community": 145, "norm_label": "_strip_legacy_prefix()" }, { @@ -39720,7 +39820,7 @@ "source_location": "L55", "_origin": "ast", "id": "scripts_migration_minio_url_extract_minio_object_key", - "community": 132, + "community": 145, "norm_label": "extract_minio_object_key()" }, { @@ -39730,7 +39830,7 @@ "source_location": "L83", "_origin": "ast", "id": "scripts_migration_minio_url_normalize_oss_storage_url", - "community": 132, + "community": 145, "norm_label": "normalize_oss_storage_url()" }, { @@ -39740,7 +39840,7 @@ "source_location": "L96", "_origin": "ast", "id": "scripts_migration_minio_url_join_relative_urls", - "community": 132, + "community": 145, "norm_label": "join_relative_urls()" }, { @@ -39750,7 +39850,7 @@ "source_location": "L109", "_origin": "ast", "id": "scripts_migration_minio_url_resolve_oss_id_csv", - "community": 132, + "community": 145, "norm_label": "resolve_oss_id_csv()" }, { @@ -39760,7 +39860,7 @@ "source_location": "L1", "_origin": "ast", "id": "scripts_migration_minio_url_rationale_1", - "community": 132, + "community": 145, "norm_label": "minio \u9644\u4ef6 url \u89c4\u8303\u5316(\u6570\u636e\u8fc1\u79fb\u5171\u7528)\u3002 \u80cc\u666f ---- crm / \u5730\u78c5 / \u62a5\u9500\u4e0e shanxia2.0 \u5171\u7528\u540c\u4e00 minio(bucket \u9ed8" }, { @@ -39770,7 +39870,7 @@ "source_location": "L40", "_origin": "ast", "id": "scripts_migration_minio_url_rationale_40", - "community": 132, + "community": 145, "norm_label": "\u53bb\u6389\u9884\u7b7e\u540d query(``?x-amz-...``)\u3002" }, { @@ -39780,7 +39880,7 @@ "source_location": "L61", "_origin": "ast", "id": "scripts_migration_minio_url_rationale_61", - "community": 132, + "community": 145, "norm_label": "\u5c06\u7edd\u5bf9/\u76f8\u5bf9 url \u89c4\u8303\u4e3a minio object key(\u4e0d\u542b bucket)\u3002" }, { @@ -39790,7 +39890,7 @@ "source_location": "L89", "_origin": "ast", "id": "scripts_migration_minio_url_rationale_89", - "community": 132, + "community": 145, "norm_label": "\u8fc1\u79fb crm ``sys_oss`` \u884c:``url`` + ``file_name`` \u2192 \u95e8\u6237\u76f8\u5bf9\u8def\u5f84\u3002" }, { @@ -39800,7 +39900,7 @@ "source_location": "L113", "_origin": "ast", "id": "scripts_migration_minio_url_rationale_113", - "community": 132, + "community": 145, "norm_label": "\u4e1a\u52a1\u8868 oss id \u4e32 \u2192 \u76f8\u5bf9 url \u4e32(\u7528\u4e8e\u5ba2\u6237\u8bc1\u7167\u3001\u8ddf\u8fdb\u9644\u4ef6\u7b49)\u3002" }, { @@ -73552,7 +73652,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L75", + "source_location": "L78", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_api_crm_contract_routes_register_contract_routes", @@ -73602,6 +73702,17 @@ "target": "app_core_menu_guard_require_admin_or_super_admin", "confidence_score": 1.0 }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L11", + "weight": 1.0, + "source": "app_api_crm_contract_routes", + "target": "app_core_menu_guard_require_menu_code", + "confidence_score": 1.0 + }, { "relation": "imports_from", "context": "import", @@ -73723,6 +73834,39 @@ "target": "app_crud_crm_contract_approval_list_contract_approvals", "confidence_score": 1.0 }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L52", + "weight": 1.0, + "source": "app_api_crm_contract_routes", + "target": "app_crud_crm_contract_approver_setting", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L51", + "weight": 1.0, + "source": "app_api_crm_contract_routes", + "target": "app_crud_crm_contract_approver_setting_get_setting", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L52", + "weight": 1.0, + "source": "app_api_crm_contract_routes", + "target": "app_crud_crm_contract_approver_setting_save_setting", + "confidence_score": 1.0 + }, { "relation": "imports", "context": "import", @@ -74069,18 +74213,40 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract", "confidence_score": 1.0 }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L53", + "weight": 1.0, + "source": "app_api_crm_contract_routes", + "target": "app_schemas_crm_contract_approver_setting", + "confidence_score": 1.0 + }, { "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L53", + "weight": 1.0, + "source": "app_api_crm_contract_routes", + "target": "app_schemas_crm_contract_approver_setting_contractapproversettingsavebody", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractapprovalactionbody", @@ -74091,7 +74257,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractbatchassignbody", @@ -74102,7 +74268,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractbatchsubmitbody", @@ -74113,7 +74279,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractcreatebody", @@ -74124,7 +74290,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractexportbody", @@ -74135,7 +74301,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractinvalidbody", @@ -74146,7 +74312,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractlistquery", @@ -74157,7 +74323,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractrenewbody", @@ -74168,7 +74334,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractsignbody", @@ -74179,7 +74345,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractstatisticsoverviewquery", @@ -74190,7 +74356,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractstatisticstrendquery", @@ -74201,7 +74367,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractstatusbody", @@ -74212,7 +74378,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractsubmitbody", @@ -74223,7 +74389,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contracttemplatesavebody", @@ -74234,7 +74400,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractupdatebody", @@ -74245,7 +74411,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractuploadattachmentsbody", @@ -74256,7 +74422,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractuploadfilebody", @@ -74267,7 +74433,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L51", + "source_location": "L54", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_schemas_crm_contract_contractwithdrawbody", @@ -74278,7 +74444,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L71", + "source_location": "L74", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_utils_crm_export_columns", @@ -74289,7 +74455,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L72", + "source_location": "L75", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_utils_excel_export", @@ -74300,7 +74466,7 @@ "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L72", + "source_location": "L75", "weight": 1.0, "source": "app_api_crm_contract_routes", "target": "app_utils_excel_export_export_rows_to_xlsx_response", @@ -74332,7 +74498,18 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L160", + "source_location": "L783", + "weight": 1.0, + "source": "app_api_crm_contract_routes_register_contract_routes", + "target": "app_core_menu_guard_require_menu_code", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L163", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_core_oper_log_decorator_oper_log", @@ -74343,7 +74520,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L155", + "source_location": "L158", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_core_response_error_response", @@ -74354,7 +74531,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L144", + "source_location": "L147", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_core_response_success_response", @@ -74365,7 +74542,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L103", + "source_location": "L106", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_core_tenant_context_get_tenant_no", @@ -74376,7 +74553,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L733", + "source_location": "L736", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_approval_approve_contract_by_contract_id", @@ -74387,7 +74564,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L758", + "source_location": "L761", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_approval_list_contract_approvals", @@ -74398,7 +74575,29 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L693", + "source_location": "L775", + "weight": 1.0, + "source": "app_api_crm_contract_routes_register_contract_routes", + "target": "app_crud_crm_contract_approver_setting_get_setting", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L790", + "weight": 1.0, + "source": "app_api_crm_contract_routes_register_contract_routes", + "target": "app_crud_crm_contract_approver_setting_save_setting", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/api/crm_contract_routes.py", + "source_location": "L696", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_batch_assign_owner", @@ -74409,7 +74608,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L269", + "source_location": "L272", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_batch_submit_contract_approval", @@ -74420,7 +74619,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L171", + "source_location": "L174", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_create_contract", @@ -74431,7 +74630,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L643", + "source_location": "L646", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_create_from_opportunity", @@ -74442,7 +74641,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L617", + "source_location": "L620", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_create_from_quote", @@ -74453,7 +74652,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L717", + "source_location": "L720", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_download_contract_pdf", @@ -74464,7 +74663,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L464", + "source_location": "L467", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_export_contracts", @@ -74475,7 +74674,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L336", + "source_location": "L339", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_finish_contract", @@ -74486,7 +74685,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L775", + "source_location": "L814", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_get_contract_detail", @@ -74497,7 +74696,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L401", + "source_location": "L404", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_get_template", @@ -74508,7 +74707,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L354", + "source_location": "L357", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_invalid_contract", @@ -74519,7 +74718,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L134", + "source_location": "L137", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_list_contracts", @@ -74530,7 +74729,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L572", + "source_location": "L575", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_query_expiring", @@ -74541,7 +74740,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L591", + "source_location": "L594", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_renew_contract", @@ -74552,7 +74751,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L378", + "source_location": "L381", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_save_template", @@ -74563,7 +74762,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L667", + "source_location": "L670", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_sign_contract", @@ -74574,7 +74773,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L224", + "source_location": "L227", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_soft_delete_contracts", @@ -74585,7 +74784,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L319", + "source_location": "L322", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_start_execute", @@ -74596,7 +74795,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L517", + "source_location": "L520", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_statistics_by_status", @@ -74607,7 +74806,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L531", + "source_location": "L534", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_statistics_by_type", @@ -74618,7 +74817,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L495", + "source_location": "L498", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_statistics_overview", @@ -74629,7 +74828,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L549", + "source_location": "L552", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_statistics_trend", @@ -74640,7 +74839,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L242", + "source_location": "L245", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_submit_contract_approval", @@ -74651,7 +74850,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L143", + "source_location": "L146", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_total_pages", @@ -74662,7 +74861,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L198", + "source_location": "L201", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_update_contract", @@ -74673,7 +74872,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L439", + "source_location": "L442", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_upload_attachments", @@ -74684,7 +74883,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L434", + "source_location": "L437", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_upload_attachments_with_category", @@ -74695,7 +74894,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L417", + "source_location": "L420", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_upload_file", @@ -74706,7 +74905,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L295", + "source_location": "L298", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_contract_withdraw_contract_approval", @@ -74717,7 +74916,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L104", + "source_location": "L107", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_crud_crm_data_scope_helpers_crm_user_info", @@ -74728,7 +74927,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L458", + "source_location": "L461", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_schemas_crm_contract_contractexportbody", @@ -74739,7 +74938,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L106", + "source_location": "L109", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_schemas_crm_contract_contractlistquery", @@ -74750,7 +74949,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L490", + "source_location": "L493", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_schemas_crm_contract_contractstatisticsoverviewquery", @@ -74761,7 +74960,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L548", + "source_location": "L551", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_schemas_crm_contract_contractstatisticstrendquery", @@ -74772,7 +74971,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", - "source_location": "L465", + "source_location": "L468", "weight": 1.0, "source": "app_api_crm_contract_routes_register_contract_routes", "target": "app_utils_excel_export_export_rows_to_xlsx_response", @@ -76781,7 +76980,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", - "source_location": "L732", + "source_location": "L733", "weight": 1.0, "source": "app_api_crm_quote_routes_register_quote_routes", "target": "app_core_menu_guard_require_menu_code", @@ -76902,7 +77101,7 @@ "context": "call", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", - "source_location": "L739", + "source_location": "L740", "weight": 1.0, "source": "app_api_crm_quote_routes_register_quote_routes", "target": "app_crud_crm_quote_approver_setting_save_setting", @@ -116405,6 +116604,17 @@ "target": "app_core_utils", "confidence_score": 1.0 }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L8", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_core_utils", + "confidence_score": 1.0 + }, { "relation": "imports_from", "context": "import", @@ -117142,6 +117352,28 @@ "target": "app_core_utils_generate_uuid", "confidence_score": 1.0 }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L8", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_core_utils_generate_uuid", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L81", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_core_utils_generate_uuid", + "confidence_score": 1.0 + }, { "relation": "calls", "context": "call", @@ -128619,6 +128851,266 @@ "target": "app_crud_crm_contract_approval_approve_transfer", "confidence_score": 1.0 }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L37", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_contract_approver_setting_assert_users_exist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L24", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_contract_approver_setting_get_setting", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L14", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_contract_approver_setting_row_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L52", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_contract_approver_setting_save_setting", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L9", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_quote_approver_setting", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L9", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_quote_approver_setting_join_approver_ids", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L9", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_crud_crm_quote_approver_setting_parse_approver_ids", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L10", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_models_crm_models", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L10", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_models_crm_models_crmcontractapproversetting", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L11", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_models_models", + "confidence_score": 1.0 + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L11", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting", + "target": "app_models_models_sysuser", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L34", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_get_setting", + "target": "app_crud_crm_contract_approver_setting_row_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L14", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_row_to_dict", + "target": "app_crud_crm_contract_approver_setting_py_any", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L17", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_row_to_dict", + "target": "app_crud_crm_quote_approver_setting_parse_approver_ids", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L14", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_row_to_dict", + "target": "app_models_crm_models_crmcontractapproversetting", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L95", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_crud_crm_contract_approver_setting_row_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L24", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_get_setting", + "target": "app_crud_crm_contract_approver_setting_py_any", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "generic_arg", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L52", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_crud_crm_contract_approver_setting_py_any", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L24", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_get_setting", + "target": "app_crud_crm_contract_approver_setting_py_session", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L37", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_assert_users_exist", + "target": "app_crud_crm_contract_approver_setting_py_session", + "confidence_score": 1.0 + }, + { + "relation": "references", + "context": "parameter_type", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L52", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_crud_crm_contract_approver_setting_py_session", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L63", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_crud_crm_contract_approver_setting_assert_users_exist", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L75", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_crud_crm_quote_approver_setting_join_approver_ids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "app/crud/crm/contract_approver_setting.py", + "source_location": "L80", + "weight": 1.0, + "source": "app_crud_crm_contract_approver_setting_save_setting", + "target": "app_models_crm_models_crmcontractapproversetting", + "confidence_score": 1.0 + }, { "relation": "contains", "confidence": "EXTRACTED", @@ -151330,6 +151822,16 @@ "target": "app_models_base_basemodel", "confidence_score": 1.0 }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "app/schemas/crm/contract_approver_setting.py", + "source_location": "L6", + "weight": 1.0, + "source": "app_schemas_crm_contract_approver_setting_contractapproversettingsavebody", + "target": "app_models_base_basemodel", + "confidence_score": 1.0 + }, { "relation": "inherits", "confidence": "EXTRACTED", @@ -154674,7 +155176,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L921", + "source_location": "L940", "weight": 1.0, "source": "app_models_crm_models_crmclue", "target": "base", @@ -154684,7 +155186,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L971", + "source_location": "L990", "weight": 1.0, "source": "app_models_crm_models_crmcluefollow", "target": "base", @@ -154714,7 +155216,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L593", + "source_location": "L612", "weight": 1.0, "source": "app_models_crm_models_crmcontractapproval", "target": "base", @@ -154724,7 +155226,17 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L624", + "source_location": "L593", + "weight": 1.0, + "source": "app_models_crm_models_crmcontractapproversetting", + "target": "base", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "app/models/crm_models.py", + "source_location": "L643", "weight": 1.0, "source": "app_models_crm_models_crmcontractchange", "target": "base", @@ -154734,7 +155246,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L689", + "source_location": "L708", "weight": 1.0, "source": "app_models_crm_models_crmcontractproduct", "target": "base", @@ -154744,7 +155256,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L730", + "source_location": "L749", "weight": 1.0, "source": "app_models_crm_models_crmcontractproductpricetier", "target": "base", @@ -154754,7 +155266,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L655", + "source_location": "L674", "weight": 1.0, "source": "app_models_crm_models_crmcontracttemplate", "target": "base", @@ -154854,7 +155366,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L995", + "source_location": "L1014", "weight": 1.0, "source": "app_models_crm_models_crmpriceletter", "target": "base", @@ -154904,7 +155416,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L755", + "source_location": "L774", "weight": 1.0, "source": "app_models_crm_models_crmquote", "target": "base", @@ -154914,7 +155426,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L870", + "source_location": "L889", "weight": 1.0, "source": "app_models_crm_models_crmquoteapproval", "target": "base", @@ -154924,7 +155436,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L851", + "source_location": "L870", "weight": 1.0, "source": "app_models_crm_models_crmquoteapproversetting", "target": "base", @@ -154934,7 +155446,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L813", + "source_location": "L832", "weight": 1.0, "source": "app_models_crm_models_crmquoteproduct", "target": "base", @@ -154944,7 +155456,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L895", + "source_location": "L914", "weight": 1.0, "source": "app_models_crm_models_crmquotesharelog", "target": "base", @@ -154954,7 +155466,7 @@ "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L1026", + "source_location": "L1045", "weight": 1.0, "source": "app_models_crm_models_crmsupplierinfo", "target": "base", @@ -157206,7 +157718,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L921", + "source_location": "L940", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmclue", @@ -157216,7 +157728,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L971", + "source_location": "L990", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmcluefollow", @@ -157246,7 +157758,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L593", + "source_location": "L612", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmcontractapproval", @@ -157256,7 +157768,17 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L624", + "source_location": "L593", + "weight": 1.0, + "source": "app_models_crm_models", + "target": "app_models_crm_models_crmcontractapproversetting", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app/models/crm_models.py", + "source_location": "L643", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmcontractchange", @@ -157266,7 +157788,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L689", + "source_location": "L708", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmcontractproduct", @@ -157276,7 +157798,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L730", + "source_location": "L749", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmcontractproductpricetier", @@ -157286,7 +157808,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L655", + "source_location": "L674", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmcontracttemplate", @@ -157386,7 +157908,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L995", + "source_location": "L1014", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmpriceletter", @@ -157436,7 +157958,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L755", + "source_location": "L774", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmquote", @@ -157446,7 +157968,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L870", + "source_location": "L889", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmquoteapproval", @@ -157456,7 +157978,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L851", + "source_location": "L870", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmquoteapproversetting", @@ -157466,7 +157988,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L813", + "source_location": "L832", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmquoteproduct", @@ -157476,7 +157998,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L895", + "source_location": "L914", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmquotesharelog", @@ -157486,7 +158008,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L1026", + "source_location": "L1045", "weight": 1.0, "source": "app_models_crm_models", "target": "app_models_crm_models_crmsupplierinfo", @@ -157745,9 +158267,9 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/models/crm_models.py", - "source_location": "L996", + "source_location": "L1015", "weight": 1.0, - "source": "app_models_crm_models_rationale_996", + "source": "app_models_crm_models_rationale_1015", "target": "app_models_crm_models_crmpriceletter", "confidence_score": 1.0 }, @@ -165462,6 +165984,16 @@ "target": "app_schemas_crm_contract_contracttemplatecreatebody", "confidence_score": 1.0 }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "app/schemas/crm/contract_approver_setting.py", + "source_location": "L6", + "weight": 1.0, + "source": "app_schemas_crm_contract_approver_setting", + "target": "app_schemas_crm_contract_approver_setting_contractapproversettingsavebody", + "confidence_score": 1.0 + }, { "relation": "contains", "confidence": "EXTRACTED", @@ -210088,5 +210620,5 @@ } ], "hyperedges": [], - "built_at_commit": "98f33644f19b8277ac0ccd2ea0d8af3abfec1db9" + "built_at_commit": "ce75576fb03007f3c2b026b3b636226b05b8a22e" } \ No newline at end of file diff --git a/backend/graphify-out/2026-08-01/manifest.json b/backend/graphify-out/2026-08-01/manifest.json index d42d833ba..846e539f3 100644 --- a/backend/graphify-out/2026-08-01/manifest.json +++ b/backend/graphify-out/2026-08-01/manifest.json @@ -1,1302 +1,1512 @@ { - "/Users/zlwu/work/00code/shanxia2.0/backend/app/__init__.py": { + "app/__init__.py": { "mtime": 1780113982.0, - "hash": "9c26ed050e94de5ab7c16bf27c0c42ef" + "ast_hash": "9c26ed050e94de5ab7c16bf27c0c42ef", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/main.py": { - "mtime": 1784428054.0, - "hash": "490534f508ed4daca6c7318b4b31c3e6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/db_auto_plan.py": { - "mtime": 1780805095.0, - "hash": "d877ff9cd2a02b66c77ed040d670125f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/customer_pool.py": { - "mtime": 1780202350.0, - "hash": "1fcafe4082c11b33ab705292cf07b20f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/__init__.py": { - "mtime": 1783208067.0, - "hash": "65f48f08b50ecea837b57abb9f1e01bb" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/pl_cert_expiry.py": { - "mtime": 1783208067.0, - "hash": "99f93482c1d14f0ec792e2cc4a5cf9a8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_auth.py": { - "mtime": 1782790853.0, - "hash": "094db7ac971711e043b1fc7870024612" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/tenant_context.py": { - "mtime": 1780201410.0, - "hash": "b18133acb1c4bd1ab0709c786f70e133" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_decorator.py": { - "mtime": 1782701254.0, - "hash": "c616506ed75346aa57937212ecf93868" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/auth.py": { - "mtime": 1782790841.0, - "hash": "9ff7c9352b9d15a20c792d3ac9416eba" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto.py": { - "mtime": 1780108930.0, - "hash": "fe51609d806a6f1ccb81ddce26e79320" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/login_crypto.py": { - "mtime": 1780108930.0, - "hash": "3f7807dffdde603ff65eeeed5883f115" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/config.py": { - "mtime": 1784428051.0, - "hash": "99599f0d816bf047265d8084dcaf0934" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_pay.py": { - "mtime": 1780108930.0, - "hash": "7b125f92286034b9c80b7015ea7eac0e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py": { - "mtime": 1782701669.0, - "hash": "3e9a16c8df8b7807be6cad96b303e65f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/database.py": { - "mtime": 1782790847.0, - "hash": "4971c5cd45857fce9950d4122f9f3391" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/security.py": { - "mtime": 1780108930.0, - "hash": "d4b24a2d7249c3e3fb15d5e7456fbed8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/request_payload.py": { - "mtime": 1780108930.0, - "hash": "f683e5ef0867a02da2c06d8461359096" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/__init__.py": { - "mtime": 1780108930.0, - "hash": "04e3e5031c7ca38b0fc3c69272f0b4da" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_infer.py": { - "mtime": 1782699326.0, - "hash": "0bab71e5a929eedae8fe3021dc8fd3ac" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/response.py": { - "mtime": 1780108930.0, - "hash": "bec8efa5e032e42a16cafeff26bf98af" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_context.py": { - "mtime": 1782699327.0, - "hash": "7f89d602179e62b4df7c787925760be3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/menu_guard.py": { - "mtime": 1780108930.0, - "hash": "c63dc7c451f9b8b826e88135bbbc667e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_collation.py": { - "mtime": 1780108930.0, - "hash": "2d581fb593646b13bba707de9e64368f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/attachment_biz.py": { - "mtime": 1782219602.0, - "hash": "4a1fc63c7155e92b4b920f39c3dfa57b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/redis_client.py": { - "mtime": 1782790834.0, - "hash": "b4681dbc3fbc59cef9663c44bb4a0a9e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/context.py": { - "mtime": 1780108930.0, - "hash": "4a9ca81161363408fe2ac0397cde2a1c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/utils.py": { - "mtime": 1780108930.0, - "hash": "88470f8073435a02b371a8a95c7d54a1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py": { - "mtime": 1782855136.0, - "hash": "92daa4b617574dce8a78fc2217cbc1b9" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/order_status_compat.py": { - "mtime": 1780108930.0, - "hash": "bd9a75bf01f391271943d8ade0f96558" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/exceptions.py": { - "mtime": 1780108930.0, - "hash": "6b750c71e0cccaa33199ab7dd9784d47" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/bx_auth.py": { - "mtime": 1782650780.0, - "hash": "43c5110641c04908d41705f558ac8a68" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/data_scope.py": { - "mtime": 1784993108.0543141, - "hash": "eb5078bff0583ab909bd7ed5e8379952" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/admin_request_json.py": { - "mtime": 1780108930.0, - "hash": "8ca43f66333d7a0219028e53f488d3e6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/delete_guard.py": { - "mtime": 1782687610.0, - "hash": "ebc19dceb290947d1adfc7c6206f0fa2" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py": { - "mtime": 1782790001.0, - "hash": "980e011bfc47fe10cafe6c1270e9d9be" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_message.py": { - "mtime": 1780108930.0, - "hash": "bccf04281267702872c44091979972e1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/bx_date_range.py": { - "mtime": 1783745556.0, - "hash": "6a3967fac9725840e027666ed103d571" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/crm_export_columns.py": { - "mtime": 1780743830.0, - "hash": "b24d3dcc0dadcfcc7b6db5171873a852" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/__init__.py": { - "mtime": 1780242127.0, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/excel_export.py": { - "mtime": 1780242127.0, - "hash": "3a3590bf5730f7eb196963e76d5baa21" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py": { - "mtime": 1782003396.0, - "hash": "ab0faf38020f30611bf4f6f6696f7289" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/pl_models.py": { - "mtime": 1784427927.0, - "hash": "b6994efa537a1f6cf3cf6884c863b693" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/models.py": { - "mtime": 1782699345.0, - "hash": "49110c81f54cf1c48c6fe03c6e8aa5b1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/__init__.py": { - "mtime": 1784035957.0, - "hash": "22bfaa7ae31dc2432d8db3bbbd6b69ed" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/crm_models.py": { - "mtime": 1784996272.4521785, - "hash": "ecbd9a0c5238813fcc9015adb4e9cdde" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/db_models.py": { - "mtime": 1782219570.0, - "hash": "d7340d4ae0717272226867cfb077cb2c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/base.py": { - "mtime": 1780108930.0, - "hash": "bd94a0e35e05556b29b23e2fdbe108ee" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/models/bx_models.py": { - "mtime": 1784980394.1502666, - "hash": "14c41443b4a71c3ee9cc2d3e9f41de4f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/auth.py": { - "mtime": 1780108930.0, - "hash": "10bd8e938e2e2069dd06b69c1a261db5" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/user.py": { - "mtime": 1780108930.0, - "hash": "7c9449203e3f490cf6c7925c53830bb9" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/__init__.py": { - "mtime": 1780112973.0, - "hash": "6928db58baf42e0b4c181fb52ab50c4a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/menu.py": { - "mtime": 1780108930.0, - "hash": "4a96aebf6a475372053a632212422204" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/attachment.py": { - "mtime": 1780108930.0, - "hash": "a2a9aa2a9ec2ad982bfc0925bd60ff47" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/common.py": { - "mtime": 1780108930.0, - "hash": "49c0726bb57476e86f16f3b67dfb89e3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/workflow.py": { - "mtime": 1780108930.0, - "hash": "c8f5dda38b78a3b7b08e26994d82bb99" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/leave.py": { - "mtime": 1780108930.0, - "hash": "5466d56c6c00865aac2400bc5ed0bfde" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/plan.py": { - "mtime": 1783754594.0, - "hash": "5687f8186e189e0357ea078439fff702" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/transport.py": { - "mtime": 1784517518.0, - "hash": "3dc92a30579d63c02d40bf837045438d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/menu_badge.py": { - "mtime": 1783257567.0, - "hash": "13f2ce92d4c5fa5b685d7f54921d626e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_maintenance.py": { - "mtime": 1782695447.0, - "hash": "50a5567e615079a1a81904c92afcc379" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/resource_snapshot.py": { - "mtime": 1782793446.0, - "hash": "327114a52c75f2316a18edb4670c667f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/__init__.py": { - "mtime": 1783242582.0, - "hash": "13deaeb249ba9b315dd19ad0c72989ab" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/freight.py": { - "mtime": 1783213205.0, - "hash": "ce389b78f64a59ee36bb3dbf9b8f0957" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/io_order.py": { - "mtime": 1784452137.0, - "hash": "507bf826314ca395810a82a65687d8f7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/transport_address.py": { - "mtime": 1782906539.0, - "hash": "9e795527053f9ac5d2f4c4161782000c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/base_data.py": { - "mtime": 1784957273.014352, - "hash": "66979da4f9c7143b231f3b93893e11a6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_urea.py": { - "mtime": 1782696196.0, - "hash": "19ccf9729fc37b47a752534f0810313e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_recharge.py": { - "mtime": 1782694169.0, - "hash": "4c6ca6df05a209baabf4250c0e011727" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/paste_recognize.py": { - "mtime": 1784955105.0, - "hash": "c5b4aedcf5441f30225a55b83e1511de" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/datetime_parse.py": { - "mtime": 1782905360.0, - "hash": "999484f6738d95159b3771ac05d57b4f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/inventory.py": { - "mtime": 1783242580.0, - "hash": "acf52aeb8407b3fda6e708758a6b6d2f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/monitor/__init__.py": { - "mtime": 1780242127.0, - "hash": "68b329da9893e34099c7d8ad5cb9c940" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/monitor/operlog.py": { - "mtime": 1782699353.0, - "hash": "be0f9bcdb42e69c2af5b8e090885c814" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/reimburse.py": { - "mtime": 1784991339.633822, - "hash": "4a946832d64195b626fea32d27b56a30" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/expense_item.py": { - "mtime": 1782688293.0, - "hash": "df7f9483521d15a13fc6c639e0975b55" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/__init__.py": { - "mtime": 1780750556.0, - "hash": "2cea3812d44c57f24aa7f00648a14412" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/attachment.py": { - "mtime": 1780750871.0, - "hash": "97ee54c0f5e7e6944a6d5edba9959b7b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/advance.py": { - "mtime": 1782688296.0, - "hash": "fd798f5b43b2e0fed17d1ef154abedd1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/common.py": { - "mtime": 1782003187.0, - "hash": "aec394241a7522c9e7f204c13988532a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/workflow.py": { - "mtime": 1782688293.0, - "hash": "90920c0fb3a0dcab7978ac8f7181aa8e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/invoice.py": { - "mtime": 1784982228.6756759, - "hash": "e1867ce504d878c22191bdf2177bfe9b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/price_letter.py": { - "mtime": 1784122554.0, - "hash": "ab729c58a8b183715a7f736413fae3dd" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/pool_rule.py": { - "mtime": 1780202212.0, - "hash": "75feeee85a38a29ff9d54872ced67b52" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer_pool.py": { - "mtime": 1780202198.0, - "hash": "a741112d51c7b9429d0b34845674253c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/quote.py": { - "mtime": 1780745856.0, - "hash": "d3d1b49b13fecb1c34fbb695ca6cafe9" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer_follow.py": { - "mtime": 1780201410.0, - "hash": "d59a60bd1ff1fdd175d98bd39aa0b248" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/__init__.py": { - "mtime": 1780201410.0, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/supplier_info.py": { - "mtime": 1784996454.8264372, - "hash": "6f9f74cdfd81501e087d072e248db27d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/opportunity.py": { - "mtime": 1780242127.0, - "hash": "6af8aec9a012bb026f75feebab2f41f3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/clue.py": { - "mtime": 1780215022.0, - "hash": "fce08aacb7699a63010fcd3f29f8a965" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/product.py": { - "mtime": 1784336535.0, - "hash": "ab06e8d22e788a0bcb864fa2cde551e1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer.py": { - "mtime": 1783823672.0, - "hash": "39e0e4d75f5e6d344f495bd1de13083e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/statistics.py": { - "mtime": 1780201410.0, - "hash": "6b5620e22a44ce3555597fe45d968813" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract.py": { - "mtime": 1784996015.6121411, - "hash": "6553f54ca1fd19086c170095f402a628" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contact.py": { - "mtime": 1780742840.0, - "hash": "b8b1b11592045acba091761fe3a193aa" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/invoice_info.py": { - "mtime": 1780406386.0, - "hash": "910b8037a62a9af50f5803f8a243e3ae" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/public_inventory.py": { - "mtime": 1783211660.0, - "hash": "240056bbe47680b75595b8bd5d4b79ce" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/__init__.py": { - "mtime": 1780804619.0, - "hash": "ca2345c4ec7fa25ea8f06bee091e2c90" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/dashboard.py": { - "mtime": 1780804990.0, - "hash": "f47acf30ab1bea0d3c3b13c86aceae17" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/weighing.py": { - "mtime": 1780935341.0, - "hash": "599ad20b72e083cad9e6968a54e6d12e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/plans.py": { - "mtime": 1780935329.0, - "hash": "33529ba0717647e76c41876abb17e399" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/inventory.py": { - "mtime": 1782219604.0, - "hash": "6bcf92e3bd086f821be6d1ffd9228247" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/sample_code.py": { - "mtime": 1780114002.0, - "hash": "b7daeb88aeae6bb90b6db066c5a9dc32" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/post.py": { - "mtime": 1784993075.6286592, - "hash": "b9121746e0499d5306ad830603079de0" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/user.py": { - "mtime": 1783851628.0, - "hash": "d0e9af7d690a2db85dd5cacfd838e38a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dict_type.py": { - "mtime": 1784993071.512383, - "hash": "1c8ab41e8dd301904f20b477c43d5712" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/tenant.py": { - "mtime": 1782688281.0, - "hash": "519521e14feea103f5bb960d5efb0324" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/biz_no_generator.py": { - "mtime": 1780108930.0, - "hash": "7fbe59bac864b3b6a1ce8c98d3433806" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/__init__.py": { - "mtime": 1780108930.0, - "hash": "187d5328ae0c945daec2698273de8e3f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/role.py": { - "mtime": 1782688282.0, - "hash": "bec6d716404363d2b49e9a25a6599431" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/menu.py": { - "mtime": 1782688282.0, - "hash": "b5aeb1d28f2d353fe43279a14bc0c635" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/site.py": { - "mtime": 1784993075.9047284, - "hash": "2c3bbe035a996ee4338c04b9128520a0" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/api_request_log.py": { - "mtime": 1782699354.0, - "hash": "918cd16afd21c505ca44ac3fdb76e97b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/oss.py": { - "mtime": 1780201410.0, - "hash": "8ee3bcd0df19a921a7530e52c89e4866" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dict_data.py": { - "mtime": 1784993069.9013383, - "hash": "99e6e3c564567303109415accb7b6e62" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/ethnic.py": { - "mtime": 1784993074.295181, - "hash": "12f2a1063313b2d6c3e184a7da3cf3d3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/workflow.py": { - "mtime": 1782688290.0, - "hash": "e94a24aa555bffecf04e6a4660076bec" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dept.py": { - "mtime": 1784993073.101274, - "hash": "15dda25682aa6c9a65887bab3d779718" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/base.py": { - "mtime": 1780108930.0, - "hash": "06a4dbc841251f19cc2c2c394529f94c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/leave.py": { - "mtime": 1782687678.0, - "hash": "838f3965165a936863ff186d3b347d10" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/monitor/__init__.py": { - "mtime": 1780242127.0, - "hash": "68b329da9893e34099c7d8ad5cb9c940" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/monitor/oper_log.py": { - "mtime": 1782699352.0, - "hash": "c37b552628dea95fcc2539547f6c2c5d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_product.py": { - "mtime": 1782650413.0, - "hash": "a17c397990f1909dfea4b310e72317e7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/price_letter.py": { - "mtime": 1784122560.0, - "hash": "a2c5faa8f77e54b8249fa142fe51b19f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/pool_rule.py": { - "mtime": 1782687680.0, - "hash": "38d3835ad7dd6a8870b7987ce3d2c5ed" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer_pool.py": { - "mtime": 1780202237.0, - "hash": "a54f2cb33f4466814ac86f043d844b98" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_approval.py": { - "mtime": 1780763324.0, - "hash": "c9c338510247afdcd733412c10e0ded3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_follow.py": { - "mtime": 1783821986.0, - "hash": "1a340f1428e7208373ca4ae545e97c56" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote.py": { - "mtime": 1782687675.0, - "hash": "6406a119fc0c4f171608da1338087e41" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer_follow.py": { - "mtime": 1782687665.0, - "hash": "eb2c00f7bdcc8183a1607dc06d7fa975" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue_follow.py": { - "mtime": 1782687674.0, - "hash": "745629c1a8818cf4e467df1cb9b13917" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_product.py": { - "mtime": 1782687676.0, - "hash": "0980f1027335a3ce2995aec5922df766" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/data_scope_helpers.py": { - "mtime": 1782650085.0, - "hash": "88a0fba14e6b4094c4009cb257379a4c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/__init__.py": { - "mtime": 1780201410.0, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/supplier_info.py": { - "mtime": 1784996460.9940393, - "hash": "cc6c68bba3b5027abec2106c094a3ae2" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_share_log.py": { - "mtime": 1782650254.0, - "hash": "139a4424e5525962fee2267c4d91002a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_approval.py": { - "mtime": 1782650314.0, - "hash": "06df363f67ef49fe7398d0204b59031f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_product.py": { - "mtime": 1782687669.0, - "hash": "9bef0ef46e23ad30cdafcfc7d23b64a6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity.py": { - "mtime": 1782687666.0, - "hash": "17f8b76860630382d0174dc3f24d9906" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue.py": { - "mtime": 1783155705.0, - "hash": "f82d06dc1c0088b91fc6c9b8f4981d2e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue_statistics.py": { - "mtime": 1782649305.0, - "hash": "b472eb2a15bcb6efe9cf68398f882908" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/product.py": { - "mtime": 1784993087.6102374, - "hash": "bab5dba6f2bc7d29e0346d70a8d2e75a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer.py": { - "mtime": 1782687664.0, - "hash": "098f6b3de5a55bf22eba01596c711545" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/statistics.py": { - "mtime": 1782649310.0, - "hash": "4e18f1735701d3ad6db6b54bd44ca797" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract.py": { - "mtime": 1783763318.0, - "hash": "5ff35e415f26e1159e79395538aade07" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contact.py": { - "mtime": 1782687664.0, - "hash": "52c342deeca0c685380751da57e80d0c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/invoice_info.py": { - "mtime": 1782687666.0, - "hash": "f0cbbf78fec330a5d81ec209b85f6e1e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/public.py": { - "mtime": 1783858998.0, - "hash": "1420acc2c5e0e425f32478d4e40de74d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/monitor.py": { - "mtime": 1782790854.0, - "hash": "33430460ce256f208bdbf0812bf58fd6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_contract_sub_routes.py": { - "mtime": 1782650354.0, - "hash": "664b26a0ae650e96ecc819b5f54e7c23" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm.py": { - "mtime": 1784336540.0, - "hash": "addb811531099292e8ddd422206c5b89" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/__init__.py": { + "app/api/__init__.py": { "mtime": 1780804649.0, - "hash": "5478dc6a14a49ceffe85299799894e74" + "ast_hash": "5478dc6a14a49ceffe85299799894e74", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/menu.py": { - "mtime": 1782790854.0, - "hash": "928f1aae1986771b4946f8b9cfe8993f" + "app/api/admin.py": { + "mtime": 1785469147.0588133, + "ast_hash": "54a5e224688d83edf4a48504e858ced3", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py": { - "mtime": 1783825326.0, - "hash": "8f42ad854382af58e5ed9b50192c66a8" + "app/api/bx/__init__.py": { + "mtime": 1784980394.0, + "ast_hash": "3cdc2240ac45b94819f79b1b1c6dc692", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/admin.py": { - "mtime": 1784993067.4096355, - "hash": "0616cc34a3e43c8156abbfe25d5bf444" + "app/api/bx/advance.py": { + "mtime": 1784992736.0, + "ast_hash": "dedd63064c7dae763c863013fbac070b", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py": { - "mtime": 1783825526.0, - "hash": "46a845a2d7ce98f2486ad45bde2d9612" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/workflow.py": { - "mtime": 1782790854.0, - "hash": "51dc8f633991ff0b4cf5d196e4b8bb12" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/leave.py": { - "mtime": 1782790854.0, - "hash": "252575238a2f77642b30672d759d24fc" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py": { - "mtime": 1784428006.0, - "hash": "6b23828e4aace9137c065a50258e264f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_io_order.py": { - "mtime": 1784452138.0, - "hash": "67ed93003043ad3daf92c412b550bcc6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/transport.py": { - "mtime": 1784448472.0, - "hash": "f3967f2fa4ab0803f9eeffae7e87100d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_maintenance.py": { - "mtime": 1782695447.0, - "hash": "fb21f46ecad19792647f666f862f429f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/__init__.py": { - "mtime": 1784428053.0, - "hash": "5a8b34968062390c7b196460b9fb51ee" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/freight.py": { - "mtime": 1783760751.0, - "hash": "bd1b6e7ce95b9c79a5bb9028ab705c23" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_site.py": { - "mtime": 1783211738.0, - "hash": "57720f4214676aa732abd69e57071b27" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/io_order.py": { - "mtime": 1784450604.0, - "hash": "78ab812248619c8a7e06f296df685bf8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/transport_address.py": { - "mtime": 1784993134.8757155, - "hash": "b46673e553d2f4620d39aae6f0c3a128" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/ocr.py": { - "mtime": 1784035957.0, - "hash": "e719bffe004a57f5f586f58d5cb98700" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/base_data.py": { - "mtime": 1784993134.477902, - "hash": "01a0b1c919afdf7423cdfe89a582cf4c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_urea.py": { - "mtime": 1782696220.0, - "hash": "d4a1325c73e3ed12e4c35dc0a8d56659" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/menu_badges.py": { - "mtime": 1783257582.0, - "hash": "31b679c3721e5017815594984533969c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_recharge.py": { - "mtime": 1782693867.0, - "hash": "36d623105e1ad12a3061ebcde64ed464" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_transport.py": { - "mtime": 1784517520.0, - "hash": "a28ceef318fffdcf25c8be8c2facc020" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/inventory.py": { - "mtime": 1783242583.0, - "hash": "0b06a779251c47c8d013277bcea07936" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py": { - "mtime": 1784992726.21857, - "hash": "f490d237ddee2ce3c3be79c56c44fb8f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/expense_item.py": { - "mtime": 1782650913.0, - "hash": "b97d30fe8ed82498c99f7f94b967e386" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/__init__.py": { - "mtime": 1784980394.1492896, - "hash": "3cdc2240ac45b94819f79b1b1c6dc692" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/attachment.py": { + "app/api/bx/attachment.py": { "mtime": 1782790898.0, - "hash": "deffc84642a228a7893570b1535a23d0" + "ast_hash": "deffc84642a228a7893570b1535a23d0", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/advance.py": { - "mtime": 1784992736.0941484, - "hash": "dedd63064c7dae763c863013fbac070b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/workflow.py": { + "app/api/bx/expense_item.py": { "mtime": 1782650913.0, - "hash": "ad8b4d36db67896e575fb123717156ee" + "ast_hash": "b97d30fe8ed82498c99f7f94b967e386", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/payment.py": { + "app/api/bx/invoice.py": { + "mtime": 1784991682.0, + "ast_hash": "ab0b069c74f069ce496fb3e800335950", + "semantic_hash": "" + }, + "app/api/bx/payment.py": { "mtime": 1783745581.0, - "hash": "5df979d32e271bac714c5a5dcfefbc10" + "ast_hash": "5df979d32e271bac714c5a5dcfefbc10", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/invoice.py": { - "mtime": 1784991682.2934463, - "hash": "ab0b069c74f069ce496fb3e800335950" + "app/api/bx/reimburse.py": { + "mtime": 1785473021.3119955, + "ast_hash": "20e4825f4e028f49c383c84e9b52e96f", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/public_inventory.py": { - "mtime": 1782790898.0, - "hash": "bef7bd54c0c870522d63c9831ca018a4" + "app/api/bx/workflow.py": { + "mtime": 1782650913.0, + "ast_hash": "ad8b4d36db67896e575fb123717156ee", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/__init__.py": { + "app/api/crm.py": { + "mtime": 1785201644.248462, + "ast_hash": "908bc0aef5900d17f1db668437cce82d", + "semantic_hash": "" + }, + "app/api/crm_contract_routes.py": { + "mtime": 1785561868.368211, + "ast_hash": "4f2f3e7220d745879ca97615fc278fbc", + "semantic_hash": "" + }, + "app/api/crm_contract_sub_routes.py": { + "mtime": 1782650354.0, + "ast_hash": "664b26a0ae650e96ecc819b5f54e7c23", + "semantic_hash": "" + }, + "app/api/crm_quote_routes.py": { + "mtime": 1785561127.931114, + "ast_hash": "3c71a2c1025674ad9176e737967664b6", + "semantic_hash": "" + }, + "app/api/db/__init__.py": { "mtime": 1782011200.0, - "hash": "61ca77ec57e9fd341220bbe074dc01a2" + "ast_hash": "61ca77ec57e9fd341220bbe074dc01a2", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/dashboard.py": { + "app/api/db/dashboard.py": { "mtime": 1782651340.0, - "hash": "fe590e7d0e20776b8e32d444290d552b" + "ast_hash": "fe590e7d0e20776b8e32d444290d552b", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/weighing.py": { + "app/api/db/inventory.py": { + "mtime": 1783156035.0, + "ast_hash": "8a1a7e283fd150c8fbcc89807c529810", + "semantic_hash": "" + }, + "app/api/db/plans.py": { + "mtime": 1783156035.0, + "ast_hash": "8643daaf48b3d4e2d28fff976de598eb", + "semantic_hash": "" + }, + "app/api/db/public_inventory.py": { + "mtime": 1782790898.0, + "ast_hash": "bef7bd54c0c870522d63c9831ca018a4", + "semantic_hash": "" + }, + "app/api/db/weighing.py": { "mtime": 1782687688.0, - "hash": "c4a5fc09d822b830ef48e93962f3dae1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/plans.py": { - "mtime": 1783156035.0, - "hash": "8643daaf48b3d4e2d28fff976de598eb" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/inventory.py": { - "mtime": 1783156035.0, - "hash": "8a1a7e283fd150c8fbcc89807c529810" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/crm_supplier_hazard.py": { - "mtime": 1784996461.6852057, - "hash": "f6c08d84fef56eda86bf2a86a5423cf1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_paste_recognize_service.py": { - "mtime": 1784955109.0, - "hash": "c7795a1c45e848d0761df69a3fb5e6c2" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_recharge_service.py": { - "mtime": 1783760938.0, - "hash": "fb8eb1f17753b7e3beb90ed2b14d021e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/workflow_callback.py": { - "mtime": 1780108930.0, - "hash": "6e6a664c5edb9d5f294caef41f5fc477" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_menu_badge_service.py": { - "mtime": 1783258109.0, - "hash": "2819fceaa269a00af0f7983b8be27cdb" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db_inventory_site_token.py": { - "mtime": 1782225270.0, - "hash": "7575a2549379f06b880811ecdaa2d024" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_service.py": { - "mtime": 1784428479.0, - "hash": "042fe2d2a5b658f83272785a9f0c4ee2" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_cert_required_service.py": { - "mtime": 1784947515.0, - "hash": "41ff60188d093a740a55ada2fa0779bc" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/workflow_engine.py": { - "mtime": 1780113992.0, - "hash": "fa0d8d7290b264cc636268b3191c4ea7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_ocr_service.py": { - "mtime": 1784036700.0, - "hash": "4387f960838bc6d8d9803bc8a102eb73" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_data_scope.py": { - "mtime": 1782650506.0, - "hash": "42cefe3eb5dadce42c9f81a24826dbac" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_carrier_service.py": { - "mtime": 1784957286.0422323, - "hash": "840e6f07e84e78fcd2beb090311d03ba" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_dibang_bridge_service.py": { - "mtime": 1783777749.0, - "hash": "4b28a02e47270ec9d6d563abd6eb2626" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_urea_service.py": { - "mtime": 1782696213.0, - "hash": "bc2d490f09fc8fe8a59b2685c02f68d0" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/web_auth_roles.py": { - "mtime": 1783858473.0, - "hash": "06bfe0225c40d171b259a4c24eafdc24" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_freight_settlement_service.py": { - "mtime": 1783213204.0, - "hash": "e3381beb50f4102eaccf4657e4c68242" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx_data_scope.py": { - "mtime": 1782650938.0, - "hash": "53922355fbdad0951548a11bddb79751" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_inventory_link_read.py": { - "mtime": 1782225276.0, - "hash": "f24ed821f200905219b51ba0e641222b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_maintenance_service.py": { - "mtime": 1783761151.0, - "hash": "ee1c11ad2ae21eddc4cbc2015b16a261" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_io_order_service.py": { - "mtime": 1784517609.0, - "hash": "09ec92ddd61f9da012eae12ca883fb58" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_transport_resource_snapshot_service.py": { - "mtime": 1782793450.0, - "hash": "0a77b5949df2ddc21945ea13f9c4d9d6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_personnel_service.py": { - "mtime": 1783845044.0, - "hash": "94f2517f259023b46dfef7f0f74fede3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/crm_quote_pdf.py": { - "mtime": 1780242127.0, - "hash": "c6247a99b20d9541dbabd49791104918" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_site_link_read.py": { - "mtime": 1782225460.0, - "hash": "700b6ceff0eb15783058ee60ebba9c31" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db_data_scope.py": { - "mtime": 1782651142.0, - "hash": "edf2a3b258e993711f7bcfd67dfaab40" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_transport_site_service.py": { - "mtime": 1782225248.0, - "hash": "06e0148020b0aff404bb75017d63a6f4" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_cert_service.py": { - "mtime": 1783849439.0, - "hash": "18ace2b6cac0fe6679dda098e84c6a39" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/approval_cycle.py": { - "mtime": 1780758200.0, - "hash": "2147b45ce5131338bdefbf473777e751" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py": { - "mtime": 1784991665.8968673, - "hash": "c6b633b61978f12d78253f0f28fac3ac" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/expense_item.py": { - "mtime": 1784993106.6252027, - "hash": "79477da4130d555c9f182ac45d13b188" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/__init__.py": { - "mtime": 1780750594.0, - "hash": "782178a68c005e9671eeaef56ce8979f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/attachment.py": { - "mtime": 1782650868.0, - "hash": "cda624408f964bd71f7d38d102b0edb3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/advance.py": { - "mtime": 1783746967.0, - "hash": "13bdb723db9e4db463f38f339a36ef8c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/storage.py": { - "mtime": 1780750869.0, - "hash": "a2549a79ff52c07c21bcdce831ca28f5" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/invoice_ledger.py": { - "mtime": 1784980394.1511152, - "hash": "3032da65e6f94863a761479ef2405abd" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/workflow.py": { - "mtime": 1784993093.1137598, - "hash": "84c6f21036c58f4defa5ad3a5f7a7611" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/base.py": { - "mtime": 1784993089.3561049, - "hash": "ef87fbb16aee54a4abf346e64b9a4774" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/invoice.py": { - "mtime": 1784991670.563277, - "hash": "301b58c855f5651c676dda01f53d9078" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/weighing_logic.py": { - "mtime": 1780804818.0, - "hash": "82d51bd5413a930e1ad9b018f0c8eaee" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/product_helpers.py": { - "mtime": 1780935268.0, - "hash": "0aa4ec972618417f4833ab3d685656b5" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/__init__.py": { - "mtime": 1780805614.0, - "hash": "d41d8cd98f00b204e9800998ecf8427e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/plan_helpers.py": { - "mtime": 1780805092.0, - "hash": "58d196e7e5973a5871a8840a56ae6032" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/mappers.py": { - "mtime": 1782219619.0, - "hash": "f4a3c256f8c28d93a41573a6a20131a1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/inventory_id.py": { - "mtime": 1780934632.0, - "hash": "26f2dc3a76a2ceb8380560a9012fcc05" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/auto_generate_plans.py": { - "mtime": 1780935400.0, - "hash": "6935d6ed190cbd6099051927fb66a9e7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/app/ws/__init__.py": { - "mtime": 1780108930.0, - "hash": "fe3e36317dd396513ca21b57101ee48f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_dibang_plan_quantity.py": { - "mtime": 1783777759.0, - "hash": "73869416708f10036beec5769af334bb" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_delete_guard.py": { - "mtime": 1782687611.0, - "hash": "15e81ca4b2212b61b35acb88d4d66b3f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_data_scope.py": { - "mtime": 1782649048.0, - "hash": "8604b897ce9c98ea865fcfd92f07b9e3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_io_order_site_feedback_status.py": { - "mtime": 1784452108.0, - "hash": "23afb1963fa69d52849e819fb077ec7a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_crm_supplier_hazard.py": { - "mtime": 1784996182.7428584, - "hash": "81c55b74b1f53dca8b83672acd32ea06" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_carrier_eligible.py": { - "mtime": 1784947707.0, - "hash": "e31680cce96586b93f2b4eb68d171117" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_personnel_cert_required.py": { - "mtime": 1783946968.0, - "hash": "9a36f0a55a8226b299707fa6da6e61b4" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_io_order_enrichment.py": { - "mtime": 1784450322.0, - "hash": "5b7c4df5d4a855d4813a17bdb158e474" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_tripartite_cert_gates.py": { - "mtime": 1784947499.0, - "hash": "6b1085772b399e7801c6f34c5a8f4fad" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_db_inventory_id.py": { - "mtime": 1780934647.0, - "hash": "e76bdfa8149ce7b0fb6f105bb8c2ee97" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_bx_invoice_ledger.py": { - "mtime": 1784980394.170508, - "hash": "084487db01bf249429e177a9ce7a125c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_opportunity.py": { - "mtime": 1783887271.0, - "hash": "282e3cb71401711e6d355dafc77840c6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260725_pl_tripartite_menus.sql": { - "mtime": 1784948072.0, - "hash": "5e30ba323536b017792f4e7e0384e2b7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_add_finance_dept.sql": { - "mtime": 1783855927.0, - "hash": "e2378c96346420f77bd2f8cf38ff333b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260711_hide_vehicle_urea_menus.sql": { - "mtime": 1783760394.0, - "hash": "2f8542187bc2678c3a779259a43288ee" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_quote_contract.py": { - "mtime": 1782650163.0, - "hash": "4f9c3fc254d538cf1b421d6c43ef3e67" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_20260726_crm_supplier_hazard_capability.sql": { - "mtime": 1784996451.7191217, - "hash": "b7fbcc913a33e908e127c954d2891e61" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_payment_invoice.py": { - "mtime": 1783888353.0, - "hash": "616d8c0e8866a3006937dd90e12526d4" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_delivery_slip_template.sql": { - "mtime": 1783231586.0, - "hash": "0eb7e0b6f67d836f7ca63531d8d1f429" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no.sql": { - "mtime": 1783240340.0, - "hash": "811a4ca42a01be2212ce279cea1abacb" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/generate_dict_reimport_sql.py": { - "mtime": 1780201410.0, - "hash": "c6aae5828051c66f51b0da5561b399f8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/apply_pl_data_scope.py": { - "mtime": 1782650517.0, - "hash": "b85dc5cf1b041a6278df237c46389f53" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/setup_business_roles.py": { - "mtime": 1783858477.0, - "hash": "b2427a543c8a29543d4155177fc2cbec" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/test_aliyun_driving_license_ocr.py": { - "mtime": 1784032210.0, - "hash": "e1d8a7a28d3b5724b22a15a477e2a452" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/renumber_crm_product_no.py": { - "mtime": 1783861492.0, - "hash": "aeaf24be6b7da4f94f5ff23dcdaaf5d1" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter_bill_price.sql": { - "mtime": 1784122547.0, - "hash": "35750eeb9b694a6f1fef0e5750a3a655" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_reset_sys_dept.sql": { - "mtime": 1783855538.0, - "hash": "4fca9665e478a0786ee83b9735ab9077" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_sys_oss.py": { - "mtime": 1783885816.0, - "hash": "9650d96c8e60189b488cd887a5453da8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/check_pl_json_aliases.py": { - "mtime": 1781880510.0, - "hash": "7785aed8717322eb71d5fd3b6a5b5c07" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_clue.py": { - "mtime": 1783887050.0, - "hash": "106a41cb68b0444892f6ad7f118c1176" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_dibang_data.py": { - "mtime": 1782011225.0, - "hash": "526080cdfad75b8aace5db82b60b01d5" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_template.sql": { - "mtime": 1783238744.0, - "hash": "1a2bb7c660b24468c6f157b6a72dc92d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/run_db_auto_generate_plans.py": { - "mtime": 1780805102.0, - "hash": "c343e35ef930482284cd43180b0181e9" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/verify_web_menu_codes.py": { - "mtime": 1783858485.0, - "hash": "0230da42a3c782b8dac113070a8adc5b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_affiliation.sql": { - "mtime": 1783845019.0, - "hash": "f97c57b5fac34dc5d47491e9de4c1769" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_bx_data.py": { - "mtime": 1783888844.0, - "hash": "eb57e09f1d0a31d7170e6fba30a91ef2" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_product_legal_use_cert_url.sql": { - "mtime": 1783253793.0, - "hash": "71e48476b63f951dbd15cfe4ef55326a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_type.sql": { - "mtime": 1783843576.0, - "hash": "82dcd1f60a2b486cc94f34bfb2228bd6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260719_pl_inbound_outbound_order.sql": { - "mtime": 1784427911.0, - "hash": "d5501841e26068cf283da18771c17364" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_bx_menu_names.sql": { - "mtime": 1783254856.0, - "hash": "dd145a51a8c2e84e337afbfcc662660a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_contract.py": { - "mtime": 1783888258.0, - "hash": "9d8c495362959fee8018c396d4e6dcfd" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/seed_sys_menu.sql": { - "mtime": 1784991327.5981123, - "hash": "007fd1b87de229e028286375e714c631" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no_format.sql": { - "mtime": 1783241697.0, - "hash": "fc7e2c0f34cce66f536ecb561acbf379" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_quote.py": { - "mtime": 1783887475.0, - "hash": "ebe7d542c8254547db2b7176baff2e47" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_customer.py": { - "mtime": 1783886258.0, - "hash": "1188a31d71cbaf95584619ae5adb007d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_slip_template.sql": { - "mtime": 1783219958.0, - "hash": "f3605b5ada4fcfe523423d811356581a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260725_bx_invoice_wallet.sql": { - "mtime": 1784980394.1665936, - "hash": "819862d297a2763ac3ded2bd1a404b49" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_product.py": { - "mtime": 1783860925.0, - "hash": "834a96698f7861a1e595e9862bedb756" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260714_pl_ocr_usage_month.sql": { - "mtime": 1784032423.0, - "hash": "e910608da8b685aedb9156dc76d952d4" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260725_bx_reimburse_change_applicant_perm.sql": { - "mtime": 1784991312.3654032, - "hash": "75a274314afc25bff17fdbd54a62786a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter.sql": { - "mtime": 1784122573.0, - "hash": "c77593b4356c05c39236083d862febf8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/refresh_business_role_menus.py": { - "mtime": 1783858483.0, - "hash": "671f7b45b1f17277e231dfb63ad79b21" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_api.py": { - "mtime": 1782650231.0, - "hash": "88c3aac725e4060d5e844362ce34b7d6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_users.py": { - "mtime": 1783855936.0, - "hash": "6d123431732a942df88abb03003d62b6" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_product_category.py": { - "mtime": 1783860690.0, - "hash": "ec8202de8f0045f5234ba1aef1ebacc8" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/compare_dict_snapshots.py": { - "mtime": 1783860128.0, - "hash": "d36bc63f46940021e6de64835c6be3cf" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260713_pl_personnel_cert_split.sql": { - "mtime": 1783946793.0, - "hash": "7b5ad50506d6660fcc3c1ac032ac5b34" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/backfill_inventory_site_tokens.py": { - "mtime": 1782219737.0, - "hash": "1fd6a817e536f30888a445f41210fd22" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_menu_groups.sql": { - "mtime": 1783256049.0, - "hash": "b9960c503b9d69e5e37838c2282e4aaf" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_api_calls.py": { - "mtime": 1782650279.0, - "hash": "aa8daef2dded6c9230b525e1a6dd19b7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_doc_reminder_menu_group.sql": { - "mtime": 1783256051.0, - "hash": "38b2defcffde886f85d8aef3c946079f" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration/minio_url.py": { - "mtime": 1783884947.0, - "hash": "d3874afe68a5b3550011e7cca40c1a10" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pyrsa-sign": { - "mtime": 1780108930.0, - "hash": "ca6d722d19465f857518df6683c07876" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/Activate.ps1": { - "mtime": 1780108930.0, - "hash": "0ffe3af6aec8ec23ff6cabdd75c58dfe" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/dotenv": { - "mtime": 1780108930.0, - "hash": "5c14a01155877c59f9968e10b34a3dc3" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pyrsa-priv2pub": { - "mtime": 1780108930.0, - "hash": "811c214d89f65ecbf440dbd706fee81a" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pip3": { - "mtime": 1780108930.0, - "hash": "fc880c4901112849f31814356b96608b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/mako-render": { - "mtime": 1780108930.0, - "hash": "0e2ebd254ae9bb8e534a489e630c3a1d" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/websockets": { - "mtime": 1780108930.0, - "hash": "d614b594134130987e204bff6638b43e" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pyrsa-keygen": { - "mtime": 1780108930.0, - "hash": "f9d735fba693df3a955650171a7332d7" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pip": { - "mtime": 1780108930.0, - "hash": "fc880c4901112849f31814356b96608b" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/httpx": { - "mtime": 1780108930.0, - "hash": "9e54ed1f82d09bbf6c02ce9533698a05" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pyrsa-decrypt": { - "mtime": 1780108930.0, - "hash": "5ebf9e36dfa5a0be187e4d312c9293b5" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pyrsa-encrypt": { - "mtime": 1780108930.0, - "hash": "dae09bf4722eab1a14285b7f5b8a9cce" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/uvicorn": { - "mtime": 1780108930.0, - "hash": "1a0c807254752fa39efdfee37357d556" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/alembic": { - "mtime": 1780108930.0, - "hash": "c91cfa7671af320b939e904c1fe91fe5" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/pyrsa-verify": { - "mtime": 1780108930.0, - "hash": "9f5fd18ec59bd56a78f33d0e8234bdc0" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/watchfiles": { - "mtime": 1780108930.0, - "hash": "6fadd6729df2485367d64111686b949c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/requirements.txt": { + "ast_hash": "c4a5fc09d822b830ef48e93962f3dae1", + "semantic_hash": "" + }, + "app/api/leave.py": { + "mtime": 1782790854.0, + "ast_hash": "252575238a2f77642b30672d759d24fc", + "semantic_hash": "" + }, + "app/api/menu.py": { + "mtime": 1782790854.0, + "ast_hash": "928f1aae1986771b4946f8b9cfe8993f", + "semantic_hash": "" + }, + "app/api/monitor.py": { + "mtime": 1782790854.0, + "ast_hash": "33430460ce256f208bdbf0812bf58fd6", + "semantic_hash": "" + }, + "app/api/pl/__init__.py": { + "mtime": 1784428053.0, + "ast_hash": "5a8b34968062390c7b196460b9fb51ee", + "semantic_hash": "" + }, + "app/api/pl/base_data.py": { + "mtime": 1784993134.0, + "ast_hash": "01a0b1c919afdf7423cdfe89a582cf4c", + "semantic_hash": "" + }, + "app/api/pl/freight.py": { + "mtime": 1783760751.0, + "ast_hash": "bd1b6e7ce95b9c79a5bb9028ab705c23", + "semantic_hash": "" + }, + "app/api/pl/inventory.py": { + "mtime": 1785202430.7567701, + "ast_hash": "954a740fd610a7e17760d158929ab9f0", + "semantic_hash": "" + }, + "app/api/pl/io_order.py": { + "mtime": 1785484571.840901, + "ast_hash": "7aa85e0ad97dcca64b1e063f37f6895e", + "semantic_hash": "" + }, + "app/api/pl/menu_badges.py": { + "mtime": 1783257582.0, + "ast_hash": "31b679c3721e5017815594984533969c", + "semantic_hash": "" + }, + "app/api/pl/ocr.py": { "mtime": 1784035957.0, - "hash": "ab08de9f2031a70cabd3e6652131daaf" + "ast_hash": "e719bffe004a57f5f586f58d5cb98700", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/README.md": { - "mtime": 1780114581.0, - "hash": "bc7b9cd033927a3f580cd89c5deb6494" + "app/api/pl/plan.py": { + "mtime": 1785453587.5490563, + "ast_hash": "0579779aad946d36b57d01996aab12d1", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/DEPLOY.md": { + "app/api/pl/public_io_order.py": { + "mtime": 1785446228.4302094, + "ast_hash": "6a3e251837d0a5102b984f7628db93d6", + "semantic_hash": "" + }, + "app/api/pl/public_site.py": { + "mtime": 1785451214.459593, + "ast_hash": "e561ee13a1df3c702c338109ef2fa06b", + "semantic_hash": "" + }, + "app/api/pl/public_transport.py": { + "mtime": 1785451206.3271422, + "ast_hash": "9d5607c25035cdf1ed518b0009e7afeb", + "semantic_hash": "" + }, + "app/api/pl/transport.py": { + "mtime": 1785447176.4223266, + "ast_hash": "2c8b67f9fecd9f43ce220b142d3a54a3", + "semantic_hash": "" + }, + "app/api/pl/transport_address.py": { + "mtime": 1784993134.0, + "ast_hash": "b46673e553d2f4620d39aae6f0c3a128", + "semantic_hash": "" + }, + "app/api/pl/vehicle_maintenance.py": { + "mtime": 1782695447.0, + "ast_hash": "fb21f46ecad19792647f666f862f429f", + "semantic_hash": "" + }, + "app/api/pl/vehicle_recharge.py": { + "mtime": 1782693867.0, + "ast_hash": "36d623105e1ad12a3061ebcde64ed464", + "semantic_hash": "" + }, + "app/api/pl/vehicle_urea.py": { + "mtime": 1782696220.0, + "ast_hash": "d4a1325c73e3ed12e4c35dc0a8d56659", + "semantic_hash": "" + }, + "app/api/public.py": { + "mtime": 1783858998.0, + "ast_hash": "1420acc2c5e0e425f32478d4e40de74d", + "semantic_hash": "" + }, + "app/api/workflow.py": { + "mtime": 1782790854.0, + "ast_hash": "51dc8f633991ff0b4cf5d196e4b8bb12", + "semantic_hash": "" + }, + "app/core/__init__.py": { + "mtime": 1780108930.0, + "ast_hash": "04e3e5031c7ca38b0fc3c69272f0b4da", + "semantic_hash": "" + }, + "app/core/admin_request_json.py": { + "mtime": 1780108930.0, + "ast_hash": "8ca43f66333d7a0219028e53f488d3e6", + "semantic_hash": "" + }, + "app/core/api_crypto.py": { + "mtime": 1780108930.0, + "ast_hash": "fe51609d806a6f1ccb81ddce26e79320", + "semantic_hash": "" + }, + "app/core/api_crypto_middleware.py": { + "mtime": 1782790001.0, + "ast_hash": "980e011bfc47fe10cafe6c1270e9d9be", + "semantic_hash": "" + }, + "app/core/api_request_log_middleware.py": { + "mtime": 1782701669.0, + "ast_hash": "3e9a16c8df8b7807be6cad96b303e65f", + "semantic_hash": "" + }, + "app/core/attachment_biz.py": { + "mtime": 1782219602.0, + "ast_hash": "4a1fc63c7155e92b4b920f39c3dfa57b", + "semantic_hash": "" + }, + "app/core/auth.py": { + "mtime": 1782790841.0, + "ast_hash": "9ff7c9352b9d15a20c792d3ac9416eba", + "semantic_hash": "" + }, + "app/core/bx_auth.py": { + "mtime": 1782650780.0, + "ast_hash": "43c5110641c04908d41705f558ac8a68", + "semantic_hash": "" + }, + "app/core/config.py": { + "mtime": 1784428051.0, + "ast_hash": "99599f0d816bf047265d8084dcaf0934", + "semantic_hash": "" + }, + "app/core/context.py": { + "mtime": 1780108930.0, + "ast_hash": "4a9ca81161363408fe2ac0397cde2a1c", + "semantic_hash": "" + }, + "app/core/data_scope.py": { + "mtime": 1784993108.0, + "ast_hash": "eb5078bff0583ab909bd7ed5e8379952", + "semantic_hash": "" + }, + "app/core/database.py": { + "mtime": 1782790847.0, + "ast_hash": "4971c5cd45857fce9950d4122f9f3391", + "semantic_hash": "" + }, + "app/core/db_auth.py": { + "mtime": 1782790853.0, + "ast_hash": "094db7ac971711e043b1fc7870024612", + "semantic_hash": "" + }, + "app/core/db_collation.py": { + "mtime": 1780108930.0, + "ast_hash": "2d581fb593646b13bba707de9e64368f", + "semantic_hash": "" + }, + "app/core/delete_guard.py": { + "mtime": 1782687610.0, + "ast_hash": "ebc19dceb290947d1adfc7c6206f0fa2", + "semantic_hash": "" + }, + "app/core/exceptions.py": { + "mtime": 1780108930.0, + "ast_hash": "6b750c71e0cccaa33199ab7dd9784d47", + "semantic_hash": "" + }, + "app/core/login_crypto.py": { + "mtime": 1780108930.0, + "ast_hash": "3f7807dffdde603ff65eeeed5883f115", + "semantic_hash": "" + }, + "app/core/menu_guard.py": { + "mtime": 1780108930.0, + "ast_hash": "c63dc7c451f9b8b826e88135bbbc667e", + "semantic_hash": "" + }, + "app/core/oper_log_context.py": { + "mtime": 1782699327.0, + "ast_hash": "7f89d602179e62b4df7c787925760be3", + "semantic_hash": "" + }, + "app/core/oper_log_decorator.py": { + "mtime": 1782701254.0, + "ast_hash": "c616506ed75346aa57937212ecf93868", + "semantic_hash": "" + }, + "app/core/oper_log_infer.py": { + "mtime": 1782699326.0, + "ast_hash": "0bab71e5a929eedae8fe3021dc8fd3ac", + "semantic_hash": "" + }, + "app/core/order_status_compat.py": { + "mtime": 1780108930.0, + "ast_hash": "bd9a75bf01f391271943d8ade0f96558", + "semantic_hash": "" + }, + "app/core/redis_client.py": { + "mtime": 1782790834.0, + "ast_hash": "b4681dbc3fbc59cef9663c44bb4a0a9e", + "semantic_hash": "" + }, + "app/core/request_payload.py": { + "mtime": 1780108930.0, + "ast_hash": "f683e5ef0867a02da2c06d8461359096", + "semantic_hash": "" + }, + "app/core/response.py": { + "mtime": 1780108930.0, + "ast_hash": "bec8efa5e032e42a16cafeff26bf98af", + "semantic_hash": "" + }, + "app/core/security.py": { + "mtime": 1780108930.0, + "ast_hash": "d4b24a2d7249c3e3fb15d5e7456fbed8", + "semantic_hash": "" + }, + "app/core/storage.py": { + "mtime": 1782855136.0, + "ast_hash": "92daa4b617574dce8a78fc2217cbc1b9", + "semantic_hash": "" + }, + "app/core/tenant_context.py": { + "mtime": 1780201410.0, + "ast_hash": "b18133acb1c4bd1ab0709c786f70e133", + "semantic_hash": "" + }, + "app/core/utils.py": { + "mtime": 1780108930.0, + "ast_hash": "88470f8073435a02b371a8a95c7d54a1", + "semantic_hash": "" + }, + "app/core/wechat_message.py": { + "mtime": 1780108930.0, + "ast_hash": "bccf04281267702872c44091979972e1", + "semantic_hash": "" + }, + "app/core/wechat_pay.py": { + "mtime": 1780108930.0, + "ast_hash": "7b125f92286034b9c80b7015ea7eac0e", + "semantic_hash": "" + }, + "app/crud/__init__.py": { + "mtime": 1780108930.0, + "ast_hash": "187d5328ae0c945daec2698273de8e3f", + "semantic_hash": "" + }, + "app/crud/api_request_log.py": { + "mtime": 1782699354.0, + "ast_hash": "918cd16afd21c505ca44ac3fdb76e97b", + "semantic_hash": "" + }, + "app/crud/base.py": { + "mtime": 1780108930.0, + "ast_hash": "06a4dbc841251f19cc2c2c394529f94c", + "semantic_hash": "" + }, + "app/crud/biz_no_generator.py": { + "mtime": 1780108930.0, + "ast_hash": "7fbe59bac864b3b6a1ce8c98d3433806", + "semantic_hash": "" + }, + "app/crud/crm/__init__.py": { + "mtime": 1780201410.0, + "ast_hash": "d41d8cd98f00b204e9800998ecf8427e", + "semantic_hash": "" + }, + "app/crud/crm/clue.py": { + "mtime": 1783155705.0, + "ast_hash": "f82d06dc1c0088b91fc6c9b8f4981d2e", + "semantic_hash": "" + }, + "app/crud/crm/clue_follow.py": { + "mtime": 1782687674.0, + "ast_hash": "745629c1a8818cf4e467df1cb9b13917", + "semantic_hash": "" + }, + "app/crud/crm/clue_statistics.py": { + "mtime": 1782649305.0, + "ast_hash": "b472eb2a15bcb6efe9cf68398f882908", + "semantic_hash": "" + }, + "app/crud/crm/contact.py": { + "mtime": 1782687664.0, + "ast_hash": "52c342deeca0c685380751da57e80d0c", + "semantic_hash": "" + }, + "app/crud/crm/contract.py": { + "mtime": 1785479747.1572795, + "ast_hash": "fac56522c6755f75c2e136aeedfc4c2f", + "semantic_hash": "" + }, + "app/crud/crm/contract_approval.py": { + "mtime": 1780763324.0, + "ast_hash": "c9c338510247afdcd733412c10e0ded3", + "semantic_hash": "" + }, + "app/crud/crm/contract_approver_setting.py": { + "mtime": 1785561463.3372936, + "ast_hash": "ccc481ae99fc6b0989f93f7b21524969", + "semantic_hash": "" + }, + "app/crud/crm/contract_product.py": { + "mtime": 1785201816.0456245, + "ast_hash": "a14fc012402b7292ae1ba0fbe3e4981f", + "semantic_hash": "" + }, + "app/crud/crm/customer.py": { + "mtime": 1782687664.0, + "ast_hash": "098f6b3de5a55bf22eba01596c711545", + "semantic_hash": "" + }, + "app/crud/crm/customer_follow.py": { + "mtime": 1782687665.0, + "ast_hash": "eb2c00f7bdcc8183a1607dc06d7fa975", + "semantic_hash": "" + }, + "app/crud/crm/customer_pool.py": { + "mtime": 1780202237.0, + "ast_hash": "a54f2cb33f4466814ac86f043d844b98", + "semantic_hash": "" + }, + "app/crud/crm/data_scope_helpers.py": { + "mtime": 1782650085.0, + "ast_hash": "88a0fba14e6b4094c4009cb257379a4c", + "semantic_hash": "" + }, + "app/crud/crm/invoice_info.py": { + "mtime": 1782687666.0, + "ast_hash": "f0cbbf78fec330a5d81ec209b85f6e1e", + "semantic_hash": "" + }, + "app/crud/crm/opportunity.py": { + "mtime": 1782687666.0, + "ast_hash": "17f8b76860630382d0174dc3f24d9906", + "semantic_hash": "" + }, + "app/crud/crm/opportunity_follow.py": { + "mtime": 1783821986.0, + "ast_hash": "1a340f1428e7208373ca4ae545e97c56", + "semantic_hash": "" + }, + "app/crud/crm/opportunity_product.py": { + "mtime": 1782687669.0, + "ast_hash": "9bef0ef46e23ad30cdafcfc7d23b64a6", + "semantic_hash": "" + }, + "app/crud/crm/pool_rule.py": { + "mtime": 1782687680.0, + "ast_hash": "38d3835ad7dd6a8870b7987ce3d2c5ed", + "semantic_hash": "" + }, + "app/crud/crm/price_letter.py": { + "mtime": 1784122560.0, + "ast_hash": "a2c5faa8f77e54b8249fa142fe51b19f", + "semantic_hash": "" + }, + "app/crud/crm/product.py": { + "mtime": 1785201638.9414847, + "ast_hash": "4ac28bc468be41a28da7c833f83bad2c", + "semantic_hash": "" + }, + "app/crud/crm/quote.py": { + "mtime": 1784996795.0, + "ast_hash": "19be4876f99cd7d6122f96bc555f3296", + "semantic_hash": "" + }, + "app/crud/crm/quote_approval.py": { + "mtime": 1782650314.0, + "ast_hash": "06df363f67ef49fe7398d0204b59031f", + "semantic_hash": "" + }, + "app/crud/crm/quote_approver_setting.py": { + "mtime": 1785560604.3386872, + "ast_hash": "d5fa39876946339fb6fee6459f200f54", + "semantic_hash": "" + }, + "app/crud/crm/quote_product.py": { + "mtime": 1785201813.742914, + "ast_hash": "c564d384d49252d384f053bb1939f2ec", + "semantic_hash": "" + }, + "app/crud/crm/quote_share_log.py": { + "mtime": 1782650254.0, + "ast_hash": "139a4424e5525962fee2267c4d91002a", + "semantic_hash": "" + }, + "app/crud/crm/statistics.py": { + "mtime": 1782649310.0, + "ast_hash": "4e18f1735701d3ad6db6b54bd44ca797", + "semantic_hash": "" + }, + "app/crud/crm/supplier_info.py": { + "mtime": 1784996460.0, + "ast_hash": "cc6c68bba3b5027abec2106c094a3ae2", + "semantic_hash": "" + }, + "app/crud/dept.py": { + "mtime": 1784993073.0, + "ast_hash": "15dda25682aa6c9a65887bab3d779718", + "semantic_hash": "" + }, + "app/crud/dict_data.py": { + "mtime": 1784993069.0, + "ast_hash": "99e6e3c564567303109415accb7b6e62", + "semantic_hash": "" + }, + "app/crud/dict_type.py": { + "mtime": 1784993071.0, + "ast_hash": "1c8ab41e8dd301904f20b477c43d5712", + "semantic_hash": "" + }, + "app/crud/ethnic.py": { + "mtime": 1784993074.0, + "ast_hash": "12f2a1063313b2d6c3e184a7da3cf3d3", + "semantic_hash": "" + }, + "app/crud/leave.py": { + "mtime": 1782687678.0, + "ast_hash": "838f3965165a936863ff186d3b347d10", + "semantic_hash": "" + }, + "app/crud/menu.py": { + "mtime": 1782688282.0, + "ast_hash": "b5aeb1d28f2d353fe43279a14bc0c635", + "semantic_hash": "" + }, + "app/crud/monitor/__init__.py": { + "mtime": 1780242127.0, + "ast_hash": "68b329da9893e34099c7d8ad5cb9c940", + "semantic_hash": "" + }, + "app/crud/monitor/oper_log.py": { + "mtime": 1782699352.0, + "ast_hash": "c37b552628dea95fcc2539547f6c2c5d", + "semantic_hash": "" + }, + "app/crud/oss.py": { + "mtime": 1785469127.5783346, + "ast_hash": "8d76d5bca5006e745f2c30f3249e71ad", + "semantic_hash": "" + }, + "app/crud/post.py": { + "mtime": 1784993075.0, + "ast_hash": "b9121746e0499d5306ad830603079de0", + "semantic_hash": "" + }, + "app/crud/role.py": { + "mtime": 1782688282.0, + "ast_hash": "bec6d716404363d2b49e9a25a6599431", + "semantic_hash": "" + }, + "app/crud/sample_code.py": { + "mtime": 1780114002.0, + "ast_hash": "b7daeb88aeae6bb90b6db066c5a9dc32", + "semantic_hash": "" + }, + "app/crud/site.py": { + "mtime": 1784993075.0, + "ast_hash": "2c3bbe035a996ee4338c04b9128520a0", + "semantic_hash": "" + }, + "app/crud/tenant.py": { + "mtime": 1782688281.0, + "ast_hash": "519521e14feea103f5bb960d5efb0324", + "semantic_hash": "" + }, + "app/crud/user.py": { + "mtime": 1783851628.0, + "ast_hash": "d0e9af7d690a2db85dd5cacfd838e38a", + "semantic_hash": "" + }, + "app/crud/workflow.py": { + "mtime": 1782688290.0, + "ast_hash": "e94a24aa555bffecf04e6a4660076bec", + "semantic_hash": "" + }, + "app/main.py": { + "mtime": 1784428054.0, + "ast_hash": "490534f508ed4daca6c7318b4b31c3e6", + "semantic_hash": "" + }, + "app/models/__init__.py": { + "mtime": 1785445893.8509457, + "ast_hash": "de0cea51503ca0f7113471fad4505c3f", + "semantic_hash": "" + }, + "app/models/base.py": { + "mtime": 1780108930.0, + "ast_hash": "bd94a0e35e05556b29b23e2fdbe108ee", + "semantic_hash": "" + }, + "app/models/bx_models.py": { + "mtime": 1785472986.385442, + "ast_hash": "d481ff1153261d1e99737ebf6a7370b0", + "semantic_hash": "" + }, + "app/models/crm_models.py": { + "mtime": 1785561859.218572, + "ast_hash": "eb975e9383e58e15a3f786f4c8db614c", + "semantic_hash": "" + }, + "app/models/db_models.py": { + "mtime": 1782219570.0, + "ast_hash": "d7340d4ae0717272226867cfb077cb2c", + "semantic_hash": "" + }, + "app/models/models.py": { + "mtime": 1782699345.0, + "ast_hash": "49110c81f54cf1c48c6fe03c6e8aa5b1", + "semantic_hash": "" + }, + "app/models/pl_models.py": { + "mtime": 1785445911.2388058, + "ast_hash": "8a7baf2f622c3a1504190a00b4ab2c29", + "semantic_hash": "" + }, + "app/schemas/__init__.py": { + "mtime": 1780112973.0, + "ast_hash": "6928db58baf42e0b4c181fb52ab50c4a", + "semantic_hash": "" + }, + "app/schemas/attachment.py": { + "mtime": 1780108930.0, + "ast_hash": "a2a9aa2a9ec2ad982bfc0925bd60ff47", + "semantic_hash": "" + }, + "app/schemas/auth.py": { + "mtime": 1780108930.0, + "ast_hash": "10bd8e938e2e2069dd06b69c1a261db5", + "semantic_hash": "" + }, + "app/schemas/bx/__init__.py": { + "mtime": 1780750556.0, + "ast_hash": "2cea3812d44c57f24aa7f00648a14412", + "semantic_hash": "" + }, + "app/schemas/bx/advance.py": { + "mtime": 1782688296.0, + "ast_hash": "fd798f5b43b2e0fed17d1ef154abedd1", + "semantic_hash": "" + }, + "app/schemas/bx/attachment.py": { + "mtime": 1780750871.0, + "ast_hash": "97ee54c0f5e7e6944a6d5edba9959b7b", + "semantic_hash": "" + }, + "app/schemas/bx/common.py": { + "mtime": 1782003187.0, + "ast_hash": "aec394241a7522c9e7f204c13988532a", + "semantic_hash": "" + }, + "app/schemas/bx/expense_item.py": { + "mtime": 1782688293.0, + "ast_hash": "df7f9483521d15a13fc6c639e0975b55", + "semantic_hash": "" + }, + "app/schemas/bx/invoice.py": { + "mtime": 1784982228.0, + "ast_hash": "e1867ce504d878c22191bdf2177bfe9b", + "semantic_hash": "" + }, + "app/schemas/bx/reimburse.py": { + "mtime": 1785473904.0760102, + "ast_hash": "895312d916362d2f30fdae467b2c4c1c", + "semantic_hash": "" + }, + "app/schemas/bx/workflow.py": { + "mtime": 1782688293.0, + "ast_hash": "90920c0fb3a0dcab7978ac8f7181aa8e", + "semantic_hash": "" + }, + "app/schemas/common.py": { + "mtime": 1780108930.0, + "ast_hash": "49c0726bb57476e86f16f3b67dfb89e3", + "semantic_hash": "" + }, + "app/schemas/crm/__init__.py": { + "mtime": 1780201410.0, + "ast_hash": "d41d8cd98f00b204e9800998ecf8427e", + "semantic_hash": "" + }, + "app/schemas/crm/clue.py": { + "mtime": 1780215022.0, + "ast_hash": "fce08aacb7699a63010fcd3f29f8a965", + "semantic_hash": "" + }, + "app/schemas/crm/contact.py": { + "mtime": 1780742840.0, + "ast_hash": "b8b1b11592045acba091761fe3a193aa", + "semantic_hash": "" + }, + "app/schemas/crm/contract.py": { + "mtime": 1785418059.662177, + "ast_hash": "b8610597478fbf5dacca6f24e901696c", + "semantic_hash": "" + }, + "app/schemas/crm/contract_approver_setting.py": { + "mtime": 1785561469.0904992, + "ast_hash": "27d82831cddb59a5849d8e30b1c49280", + "semantic_hash": "" + }, + "app/schemas/crm/customer.py": { + "mtime": 1783823672.0, + "ast_hash": "39e0e4d75f5e6d344f495bd1de13083e", + "semantic_hash": "" + }, + "app/schemas/crm/customer_follow.py": { + "mtime": 1780201410.0, + "ast_hash": "d59a60bd1ff1fdd175d98bd39aa0b248", + "semantic_hash": "" + }, + "app/schemas/crm/customer_pool.py": { + "mtime": 1780202198.0, + "ast_hash": "a741112d51c7b9429d0b34845674253c", + "semantic_hash": "" + }, + "app/schemas/crm/invoice_info.py": { + "mtime": 1780406386.0, + "ast_hash": "910b8037a62a9af50f5803f8a243e3ae", + "semantic_hash": "" + }, + "app/schemas/crm/opportunity.py": { + "mtime": 1780242127.0, + "ast_hash": "6af8aec9a012bb026f75feebab2f41f3", + "semantic_hash": "" + }, + "app/schemas/crm/pool_rule.py": { + "mtime": 1780202212.0, + "ast_hash": "75feeee85a38a29ff9d54872ced67b52", + "semantic_hash": "" + }, + "app/schemas/crm/price_letter.py": { + "mtime": 1784122554.0, + "ast_hash": "ab729c58a8b183715a7f736413fae3dd", + "semantic_hash": "" + }, + "app/schemas/crm/product.py": { + "mtime": 1785201684.9222736, + "ast_hash": "5ae498cfce27485fc4d66938ab0b692d", + "semantic_hash": "" + }, + "app/schemas/crm/quote.py": { + "mtime": 1785418147.320159, + "ast_hash": "6f2eb027a97447585d109a653ce3b3a7", + "semantic_hash": "" + }, + "app/schemas/crm/quote_approver_setting.py": { + "mtime": 1785560601.5287747, + "ast_hash": "b349e4b07d648a4bb37d7f1f1bed20c9", + "semantic_hash": "" + }, + "app/schemas/crm/statistics.py": { + "mtime": 1780201410.0, + "ast_hash": "6b5620e22a44ce3555597fe45d968813", + "semantic_hash": "" + }, + "app/schemas/crm/supplier_info.py": { + "mtime": 1784996454.0, + "ast_hash": "6f9f74cdfd81501e087d072e248db27d", + "semantic_hash": "" + }, + "app/schemas/db/__init__.py": { + "mtime": 1780804619.0, + "ast_hash": "ca2345c4ec7fa25ea8f06bee091e2c90", + "semantic_hash": "" + }, + "app/schemas/db/dashboard.py": { + "mtime": 1780804990.0, + "ast_hash": "f47acf30ab1bea0d3c3b13c86aceae17", + "semantic_hash": "" + }, + "app/schemas/db/inventory.py": { + "mtime": 1782219604.0, + "ast_hash": "6bcf92e3bd086f821be6d1ffd9228247", + "semantic_hash": "" + }, + "app/schemas/db/plans.py": { + "mtime": 1780935329.0, + "ast_hash": "33529ba0717647e76c41876abb17e399", + "semantic_hash": "" + }, + "app/schemas/db/public_inventory.py": { + "mtime": 1783211660.0, + "ast_hash": "240056bbe47680b75595b8bd5d4b79ce", + "semantic_hash": "" + }, + "app/schemas/db/weighing.py": { + "mtime": 1780935341.0, + "ast_hash": "599ad20b72e083cad9e6968a54e6d12e", + "semantic_hash": "" + }, + "app/schemas/leave.py": { + "mtime": 1780108930.0, + "ast_hash": "5466d56c6c00865aac2400bc5ed0bfde", + "semantic_hash": "" + }, + "app/schemas/menu.py": { + "mtime": 1780108930.0, + "ast_hash": "4a96aebf6a475372053a632212422204", + "semantic_hash": "" + }, + "app/schemas/monitor/__init__.py": { + "mtime": 1780242127.0, + "ast_hash": "68b329da9893e34099c7d8ad5cb9c940", + "semantic_hash": "" + }, + "app/schemas/monitor/operlog.py": { + "mtime": 1782699353.0, + "ast_hash": "be0f9bcdb42e69c2af5b8e090885c814", + "semantic_hash": "" + }, + "app/schemas/pl/__init__.py": { + "mtime": 1783242582.0, + "ast_hash": "13deaeb249ba9b315dd19ad0c72989ab", + "semantic_hash": "" + }, + "app/schemas/pl/base_data.py": { + "mtime": 1784957273.0, + "ast_hash": "66979da4f9c7143b231f3b93893e11a6", + "semantic_hash": "" + }, + "app/schemas/pl/datetime_parse.py": { + "mtime": 1782905360.0, + "ast_hash": "999484f6738d95159b3771ac05d57b4f", + "semantic_hash": "" + }, + "app/schemas/pl/freight.py": { + "mtime": 1785439224.2711833, + "ast_hash": "1fa847594598dfb74337780a390d79a9", + "semantic_hash": "" + }, + "app/schemas/pl/inventory.py": { + "mtime": 1785202429.9738195, + "ast_hash": "96dd94a34de58fcdf81bb2b1b276c305", + "semantic_hash": "" + }, + "app/schemas/pl/io_order.py": { + "mtime": 1785450376.20725, + "ast_hash": "2d8c61e94fe42c6fdb7654d84d9ba726", + "semantic_hash": "" + }, + "app/schemas/pl/menu_badge.py": { + "mtime": 1783257567.0, + "ast_hash": "13f2ce92d4c5fa5b685d7f54921d626e", + "semantic_hash": "" + }, + "app/schemas/pl/paste_recognize.py": { + "mtime": 1784955105.0, + "ast_hash": "c5b4aedcf5441f30225a55b83e1511de", + "semantic_hash": "" + }, + "app/schemas/pl/plan.py": { + "mtime": 1785453577.8897812, + "ast_hash": "c14ca411d0757f7785c348c22d0df284", + "semantic_hash": "" + }, + "app/schemas/pl/resource_snapshot.py": { + "mtime": 1782793446.0, + "ast_hash": "327114a52c75f2316a18edb4670c667f", + "semantic_hash": "" + }, + "app/schemas/pl/transport.py": { + "mtime": 1785451180.4207053, + "ast_hash": "58b5a258b45a51239dd459903999d865", + "semantic_hash": "" + }, + "app/schemas/pl/transport_address.py": { + "mtime": 1782906539.0, + "ast_hash": "9e795527053f9ac5d2f4c4161782000c", + "semantic_hash": "" + }, + "app/schemas/pl/vehicle_maintenance.py": { + "mtime": 1782695447.0, + "ast_hash": "50a5567e615079a1a81904c92afcc379", + "semantic_hash": "" + }, + "app/schemas/pl/vehicle_recharge.py": { + "mtime": 1782694169.0, + "ast_hash": "4c6ca6df05a209baabf4250c0e011727", + "semantic_hash": "" + }, + "app/schemas/pl/vehicle_urea.py": { + "mtime": 1782696196.0, + "ast_hash": "19ccf9729fc37b47a752534f0810313e", + "semantic_hash": "" + }, + "app/schemas/user.py": { + "mtime": 1780108930.0, + "ast_hash": "7c9449203e3f490cf6c7925c53830bb9", + "semantic_hash": "" + }, + "app/schemas/workflow.py": { + "mtime": 1780108930.0, + "ast_hash": "c8f5dda38b78a3b7b08e26994d82bb99", + "semantic_hash": "" + }, + "app/services/bx/__init__.py": { + "mtime": 1780750594.0, + "ast_hash": "782178a68c005e9671eeaef56ce8979f", + "semantic_hash": "" + }, + "app/services/bx/advance.py": { + "mtime": 1783746967.0, + "ast_hash": "13bdb723db9e4db463f38f339a36ef8c", + "semantic_hash": "" + }, + "app/services/bx/approval_cycle.py": { + "mtime": 1780758200.0, + "ast_hash": "2147b45ce5131338bdefbf473777e751", + "semantic_hash": "" + }, + "app/services/bx/attachment.py": { + "mtime": 1782650868.0, + "ast_hash": "cda624408f964bd71f7d38d102b0edb3", + "semantic_hash": "" + }, + "app/services/bx/base.py": { + "mtime": 1784993089.0, + "ast_hash": "ef87fbb16aee54a4abf346e64b9a4774", + "semantic_hash": "" + }, + "app/services/bx/expense_item.py": { + "mtime": 1784993106.0, + "ast_hash": "79477da4130d555c9f182ac45d13b188", + "semantic_hash": "" + }, + "app/services/bx/invoice.py": { + "mtime": 1784991670.0, + "ast_hash": "301b58c855f5651c676dda01f53d9078", + "semantic_hash": "" + }, + "app/services/bx/invoice_ledger.py": { + "mtime": 1784980394.0, + "ast_hash": "3032da65e6f94863a761479ef2405abd", + "semantic_hash": "" + }, + "app/services/bx/reimburse.py": { + "mtime": 1785473904.0761359, + "ast_hash": "f1ddebadb0f08f0cad5072aa2b3fb439", + "semantic_hash": "" + }, + "app/services/bx/storage.py": { + "mtime": 1780750869.0, + "ast_hash": "a2549a79ff52c07c21bcdce831ca28f5", + "semantic_hash": "" + }, + "app/services/bx/workflow.py": { + "mtime": 1784993093.0, + "ast_hash": "84c6f21036c58f4defa5ad3a5f7a7611", + "semantic_hash": "" + }, + "app/services/bx_data_scope.py": { + "mtime": 1782650938.0, + "ast_hash": "53922355fbdad0951548a11bddb79751", + "semantic_hash": "" + }, + "app/services/crm_quote_pdf.py": { + "mtime": 1780242127.0, + "ast_hash": "c6247a99b20d9541dbabd49791104918", + "semantic_hash": "" + }, + "app/services/crm_supplier_hazard.py": { + "mtime": 1784998230.0, + "ast_hash": "0c0f17f3fb04d1e2b72acd99d7226da4", + "semantic_hash": "" + }, + "app/services/db/__init__.py": { + "mtime": 1780805614.0, + "ast_hash": "d41d8cd98f00b204e9800998ecf8427e", + "semantic_hash": "" + }, + "app/services/db/auto_generate_plans.py": { + "mtime": 1780935400.0, + "ast_hash": "6935d6ed190cbd6099051927fb66a9e7", + "semantic_hash": "" + }, + "app/services/db/inventory_id.py": { + "mtime": 1780934632.0, + "ast_hash": "26f2dc3a76a2ceb8380560a9012fcc05", + "semantic_hash": "" + }, + "app/services/db/mappers.py": { + "mtime": 1782219619.0, + "ast_hash": "f4a3c256f8c28d93a41573a6a20131a1", + "semantic_hash": "" + }, + "app/services/db/plan_helpers.py": { + "mtime": 1780805092.0, + "ast_hash": "58d196e7e5973a5871a8840a56ae6032", + "semantic_hash": "" + }, + "app/services/db/product_helpers.py": { + "mtime": 1780935268.0, + "ast_hash": "0aa4ec972618417f4833ab3d685656b5", + "semantic_hash": "" + }, + "app/services/db/weighing_logic.py": { + "mtime": 1780804818.0, + "ast_hash": "82d51bd5413a930e1ad9b018f0c8eaee", + "semantic_hash": "" + }, + "app/services/db_data_scope.py": { + "mtime": 1782651142.0, + "ast_hash": "edf2a3b258e993711f7bcfd67dfaab40", + "semantic_hash": "" + }, + "app/services/pl_brand_archive.py": { + "mtime": 1785453570.763075, + "ast_hash": "39ddadac740582aed7d2d3ba01b75e4a", + "semantic_hash": "" + }, + "app/services/pl_carrier_service.py": { + "mtime": 1784957286.0, + "ast_hash": "840e6f07e84e78fcd2beb090311d03ba", + "semantic_hash": "" + }, + "app/services/pl_cert_required_service.py": { + "mtime": 1784947515.0, + "ast_hash": "41ff60188d093a740a55ada2fa0779bc", + "semantic_hash": "" + }, + "app/services/pl_cert_service.py": { + "mtime": 1783849439.0, + "ast_hash": "18ace2b6cac0fe6679dda098e84c6a39", + "semantic_hash": "" + }, + "app/services/pl_data_scope.py": { + "mtime": 1782650506.0, + "ast_hash": "42cefe3eb5dadce42c9f81a24826dbac", + "semantic_hash": "" + }, + "app/services/pl_dibang_bridge_service.py": { + "mtime": 1783777749.0, + "ast_hash": "4b28a02e47270ec9d6d563abd6eb2626", + "semantic_hash": "" + }, + "app/services/pl_feedback_brand_qty.py": { + "mtime": 1785452749.8554196, + "ast_hash": "bfba418f9f5cfd45cf34465da26d44af", + "semantic_hash": "" + }, + "app/services/pl_freight_settlement_service.py": { + "mtime": 1783213204.0, + "ast_hash": "e3381beb50f4102eaccf4657e4c68242", + "semantic_hash": "" + }, + "app/services/pl_inventory_link_read.py": { + "mtime": 1782225276.0, + "ast_hash": "f24ed821f200905219b51ba0e641222b", + "semantic_hash": "" + }, + "app/services/pl_inventory_service.py": { + "mtime": 1785453321.8178306, + "ast_hash": "da720941e00699981b698776e530c8e0", + "semantic_hash": "" + }, + "app/services/pl_io_order_service.py": { + "mtime": 1785452761.8341963, + "ast_hash": "e53a042a53151739d82bb6db0c10bf93", + "semantic_hash": "" + }, + "app/services/pl_menu_badge_service.py": { + "mtime": 1783258109.0, + "ast_hash": "2819fceaa269a00af0f7983b8be27cdb", + "semantic_hash": "" + }, + "app/services/pl_ocr_service.py": { + "mtime": 1784036700.0, + "ast_hash": "4387f960838bc6d8d9803bc8a102eb73", + "semantic_hash": "" + }, + "app/services/pl_paste_recognize_service.py": { + "mtime": 1784955109.0, + "ast_hash": "c7795a1c45e848d0761df69a3fb5e6c2", + "semantic_hash": "" + }, + "app/services/pl_personnel_service.py": { + "mtime": 1783845044.0, + "ast_hash": "94f2517f259023b46dfef7f0f74fede3", + "semantic_hash": "" + }, + "app/services/pl_plan_service.py": { + "mtime": 1785447059.0674565, + "ast_hash": "61f87e73f1d73abf8bc1609d7113e0a7", + "semantic_hash": "" + }, + "app/services/pl_product_display.py": { + "mtime": 1785451173.1029577, + "ast_hash": "7d196765118646a66ac1eb4f4c86950a", + "semantic_hash": "" + }, + "app/services/pl_site_link_read.py": { + "mtime": 1782225460.0, + "ast_hash": "700b6ceff0eb15783058ee60ebba9c31", + "semantic_hash": "" + }, + "app/services/pl_transport_resource_snapshot_service.py": { + "mtime": 1782793450.0, + "ast_hash": "0a77b5949df2ddc21945ea13f9c4d9d6", + "semantic_hash": "" + }, + "app/services/pl_transport_site_service.py": { + "mtime": 1782225248.0, + "ast_hash": "06e0148020b0aff404bb75017d63a6f4", + "semantic_hash": "" + }, + "app/services/pl_vehicle_maintenance_service.py": { + "mtime": 1783761151.0, + "ast_hash": "ee1c11ad2ae21eddc4cbc2015b16a261", + "semantic_hash": "" + }, + "app/services/pl_vehicle_recharge_service.py": { + "mtime": 1783760938.0, + "ast_hash": "fb8eb1f17753b7e3beb90ed2b14d021e", + "semantic_hash": "" + }, + "app/services/pl_vehicle_urea_service.py": { + "mtime": 1782696213.0, + "ast_hash": "bc2d490f09fc8fe8a59b2685c02f68d0", + "semantic_hash": "" + }, + "app/services/web_auth_roles.py": { + "mtime": 1783858473.0, + "ast_hash": "06bfe0225c40d171b259a4c24eafdc24", + "semantic_hash": "" + }, + "app/services/workflow_callback.py": { + "mtime": 1780108930.0, + "ast_hash": "6e6a664c5edb9d5f294caef41f5fc477", + "semantic_hash": "" + }, + "app/services/workflow_engine.py": { + "mtime": 1780113992.0, + "ast_hash": "fa0d8d7290b264cc636268b3191c4ea7", + "semantic_hash": "" + }, + "app/tasks/__init__.py": { + "mtime": 1783208067.0, + "ast_hash": "65f48f08b50ecea837b57abb9f1e01bb", + "semantic_hash": "" + }, + "app/tasks/customer_pool.py": { + "mtime": 1780202350.0, + "ast_hash": "1fcafe4082c11b33ab705292cf07b20f", + "semantic_hash": "" + }, + "app/tasks/db_auto_plan.py": { + "mtime": 1780805095.0, + "ast_hash": "d877ff9cd2a02b66c77ed040d670125f", + "semantic_hash": "" + }, + "app/tasks/pl_cert_expiry.py": { + "mtime": 1783208067.0, + "ast_hash": "99f93482c1d14f0ec792e2cc4a5cf9a8", + "semantic_hash": "" + }, + "app/utils/__init__.py": { + "mtime": 1780242127.0, + "ast_hash": "d41d8cd98f00b204e9800998ecf8427e", + "semantic_hash": "" + }, + "app/utils/bx_codegen.py": { + "mtime": 1782003396.0, + "ast_hash": "ab0faf38020f30611bf4f6f6696f7289", + "semantic_hash": "" + }, + "app/utils/bx_date_range.py": { + "mtime": 1783745556.0, + "ast_hash": "6a3967fac9725840e027666ed103d571", + "semantic_hash": "" + }, + "app/utils/crm_export_columns.py": { + "mtime": 1780743830.0, + "ast_hash": "b24d3dcc0dadcfcc7b6db5171873a852", + "semantic_hash": "" + }, + "app/utils/excel_export.py": { + "mtime": 1780242127.0, + "ast_hash": "3a3590bf5730f7eb196963e76d5baa21", + "semantic_hash": "" + }, + "app/ws/__init__.py": { + "mtime": 1780108930.0, + "ast_hash": "fe3e36317dd396513ca21b57101ee48f", + "semantic_hash": "" + }, + "scripts/backfill_crm_contract_attachment_urls.py": { + "mtime": 1785469147.228035, + "ast_hash": "f7419274bfc1113c43360c4c408ad731", + "semantic_hash": "" + }, + "scripts/backfill_crm_customer_license_urls.py": { + "mtime": 1785467213.3740296, + "ast_hash": "29694d834f575fc9b71cf5173873ffd4", + "semantic_hash": "" + }, + "scripts/migrate_20260727_crm_product_brand_alias.sql": { + "mtime": 1785160650.0307376, + "ast_hash": "a8378474a507e34e93c793de5bd4b468", + "semantic_hash": "" + }, + "scripts/migrate_20260727_pl_plan_create_date.sql": { + "mtime": 1785140686.8755436, + "ast_hash": "ca737a8bb5cbc8694d2131ec04ac48e2", + "semantic_hash": "" + }, + "scripts/migrate_20260727_split_brand_from_product_name.py": { + "mtime": 1785202591.7822654, + "ast_hash": "b6fffc10a38c2607af35b69679baa403", + "semantic_hash": "" + }, + "scripts/migrate_20260731_bx_reimburse_invoice_attachment_id.sql": { + "mtime": 1785473095.766881, + "ast_hash": "361b571af480b78065c92f355ee29551", + "semantic_hash": "" + }, + "scripts/migrate_20260731_pl_feedback_brand_qty.sql": { + "mtime": 1785445506.58171, + "ast_hash": "7c9750fd82bc08bdf8012a8da42ca9be", + "semantic_hash": "" + }, + "scripts/migrate_20260731_pl_plan_plan_date_nullable.sql": { + "mtime": 1785439209.757662, + "ast_hash": "a59fac95d970de9d509e1118b566eb4a", + "semantic_hash": "" + }, + "scripts/migrate_20260801_crm_contract_approver_setting.sql": { + "mtime": 1785561454.9404912, + "ast_hash": "23daa450c42083b524c9e14b2d062604", + "semantic_hash": "" + }, + "scripts/migrate_20260801_crm_quote_approver_setting.sql": { + "mtime": 1785560449.173092, + "ast_hash": "4a58c46df0aa2b512aa240dc95a72408", + "semantic_hash": "" + }, + "scripts/migrate_bx_data.py": { + "mtime": 1785455807.1058779, + "ast_hash": "eb57e09f1d0a31d7170e6fba30a91ef2", + "semantic_hash": "" + }, + "scripts/migrate_crm_clue.py": { + "mtime": 1785455807.1067886, + "ast_hash": "106a41cb68b0444892f6ad7f118c1176", + "semantic_hash": "" + }, + "scripts/migrate_crm_contract.py": { + "mtime": 1785469153.230627, + "ast_hash": "4274cc4a7467069efbd04d4215ecbf15", + "semantic_hash": "" + }, + "scripts/migrate_crm_customer.py": { + "mtime": 1785455807.108558, + "ast_hash": "1188a31d71cbaf95584619ae5adb007d", + "semantic_hash": "" + }, + "scripts/migrate_crm_opportunity.py": { + "mtime": 1785455807.1091886, + "ast_hash": "282e3cb71401711e6d355dafc77840c6", + "semantic_hash": "" + }, + "scripts/migrate_crm_payment_invoice.py": { + "mtime": 1785455807.109947, + "ast_hash": "616d8c0e8866a3006937dd90e12526d4", + "semantic_hash": "" + }, + "scripts/migrate_crm_product.py": { + "mtime": 1785457303.6438105, + "ast_hash": "e1c650677317dd11c7cf8b932ee005c5", + "semantic_hash": "" + }, + "scripts/migrate_crm_product_category.py": { + "mtime": 1785462269.0083828, + "ast_hash": "17863b03eef51cc55f1d0b82d69fafaa", + "semantic_hash": "" + }, + "scripts/migrate_crm_quote.py": { + "mtime": 1785455807.1109953, + "ast_hash": "ebe7d542c8254547db2b7176baff2e47", + "semantic_hash": "" + }, + "scripts/migrate_crm_sys_oss.py": { + "mtime": 1785468795.7973402, + "ast_hash": "c3cedf7adb45cf00dba27a7e74a42d1f", + "semantic_hash": "" + }, + "scripts/migrate_dibang_data.py": { + "mtime": 1785455807.1121647, + "ast_hash": "526080cdfad75b8aace5db82b60b01d5", + "semantic_hash": "" + }, + "scripts/migrate_users.py": { + "mtime": 1785455807.1137278, + "ast_hash": "6d123431732a942df88abb03003d62b6", + "semantic_hash": "" + }, + "scripts/migration/minio_url.py": { + "mtime": 1785465354.4058757, + "ast_hash": "d3874afe68a5b3550011e7cca40c1a10", + "semantic_hash": "" + }, + "scripts/renumber_crm_product_no.py": { + "mtime": 1785455807.1141253, + "ast_hash": "aeaf24be6b7da4f94f5ff23dcdaaf5d1", + "semantic_hash": "" + }, + "start-prod.sh": { + "mtime": 1782639355.0, + "ast_hash": "9f79bda3385ebf7700496213c7557d7e", + "semantic_hash": "" + }, + "start.sh": { + "mtime": 1780114661.0, + "ast_hash": "214c10e3fb95b8d7f17bcd5c6dd96126", + "semantic_hash": "" + }, + "tests/test_bx_invoice_ledger.py": { + "mtime": 1784980394.0, + "ast_hash": "084487db01bf249429e177a9ce7a125c", + "semantic_hash": "" + }, + "tests/test_crm_supplier_hazard.py": { + "mtime": 1784996182.0, + "ast_hash": "81c55b74b1f53dca8b83672acd32ea06", + "semantic_hash": "" + }, + "tests/test_data_scope.py": { + "mtime": 1782649048.0, + "ast_hash": "8604b897ce9c98ea865fcfd92f07b9e3", + "semantic_hash": "" + }, + "tests/test_db_inventory_id.py": { + "mtime": 1780934647.0, + "ast_hash": "e76bdfa8149ce7b0fb6f105bb8c2ee97", + "semantic_hash": "" + }, + "tests/test_delete_guard.py": { + "mtime": 1782687611.0, + "ast_hash": "15e81ca4b2212b61b35acb88d4d66b3f", + "semantic_hash": "" + }, + "tests/test_pl_brand_archive.py": { + "mtime": 1785453323.7111857, + "ast_hash": "58321803ebabe3dd91a32ac60e3d5084", + "semantic_hash": "" + }, + "tests/test_pl_carrier_eligible.py": { + "mtime": 1784947707.0, + "ast_hash": "e31680cce96586b93f2b4eb68d171117", + "semantic_hash": "" + }, + "tests/test_pl_dibang_plan_quantity.py": { + "mtime": 1783777759.0, + "ast_hash": "73869416708f10036beec5769af334bb", + "semantic_hash": "" + }, + "tests/test_pl_feedback_brand_qty.py": { + "mtime": 1785452788.497664, + "ast_hash": "62ccfa95bb3fa29525368ff07c98027a", + "semantic_hash": "" + }, + "tests/test_pl_io_order_enrichment.py": { + "mtime": 1784450322.0, + "ast_hash": "5b7c4df5d4a855d4813a17bdb158e474", + "semantic_hash": "" + }, + "tests/test_pl_io_order_site_feedback_status.py": { + "mtime": 1785446258.2551012, + "ast_hash": "b58ea026322ee505d0b9d2197756818c", + "semantic_hash": "" + }, + "tests/test_pl_personnel_cert_required.py": { + "mtime": 1783946968.0, + "ast_hash": "9a36f0a55a8226b299707fa6da6e61b4", + "semantic_hash": "" + }, + "tests/test_pl_plan_create_date.py": { + "mtime": 1785140895.1704023, + "ast_hash": "eedf83453eb937e4b034a365fba1317b", + "semantic_hash": "" + }, + "tests/test_pl_tripartite_cert_gates.py": { + "mtime": 1784947499.0, + "ast_hash": "6b1085772b399e7801c6f34c5a8f4fad", + "semantic_hash": "" + }, + "tests/test_quote_approver_setting.py": { + "mtime": 1785560055.1908324, + "ast_hash": "9e94d212af383d4be788cb00a32e061e", + "semantic_hash": "" + }, + "venv.bak.broken/bin/Activate.ps1": { + "mtime": 1780108930.0, + "ast_hash": "0ffe3af6aec8ec23ff6cabdd75c58dfe", + "semantic_hash": "" + }, + "venv.bak.broken/bin/alembic": { + "mtime": 1780108930.0, + "ast_hash": "c91cfa7671af320b939e904c1fe91fe5", + "semantic_hash": "" + }, + "venv.bak.broken/bin/dotenv": { + "mtime": 1780108930.0, + "ast_hash": "5c14a01155877c59f9968e10b34a3dc3", + "semantic_hash": "" + }, + "venv.bak.broken/bin/httpx": { + "mtime": 1780108930.0, + "ast_hash": "9e54ed1f82d09bbf6c02ce9533698a05", + "semantic_hash": "" + }, + "venv.bak.broken/bin/mako-render": { + "mtime": 1780108930.0, + "ast_hash": "0e2ebd254ae9bb8e534a489e630c3a1d", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pip": { + "mtime": 1780108930.0, + "ast_hash": "fc880c4901112849f31814356b96608b", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pip3": { + "mtime": 1780108930.0, + "ast_hash": "fc880c4901112849f31814356b96608b", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pyrsa-decrypt": { + "mtime": 1780108930.0, + "ast_hash": "5ebf9e36dfa5a0be187e4d312c9293b5", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pyrsa-encrypt": { + "mtime": 1780108930.0, + "ast_hash": "dae09bf4722eab1a14285b7f5b8a9cce", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pyrsa-keygen": { + "mtime": 1780108930.0, + "ast_hash": "f9d735fba693df3a955650171a7332d7", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pyrsa-priv2pub": { + "mtime": 1780108930.0, + "ast_hash": "811c214d89f65ecbf440dbd706fee81a", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pyrsa-sign": { + "mtime": 1780108930.0, + "ast_hash": "ca6d722d19465f857518df6683c07876", + "semantic_hash": "" + }, + "venv.bak.broken/bin/pyrsa-verify": { + "mtime": 1780108930.0, + "ast_hash": "9f5fd18ec59bd56a78f33d0e8234bdc0", + "semantic_hash": "" + }, + "venv.bak.broken/bin/uvicorn": { + "mtime": 1780108930.0, + "ast_hash": "1a0c807254752fa39efdfee37357d556", + "semantic_hash": "" + }, + "venv.bak.broken/bin/watchfiles": { + "mtime": 1780108930.0, + "ast_hash": "6fadd6729df2485367d64111686b949c", + "semantic_hash": "" + }, + "venv.bak.broken/bin/websockets": { + "mtime": 1780108930.0, + "ast_hash": "d614b594134130987e204bff6638b43e", + "semantic_hash": "" + }, + "DEPLOY.md": { "mtime": 1782639356.0, - "hash": "f6f454af21244127ebade0c80ece880b" + "ast_hash": "f6f454af21244127ebade0c80ece880b", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260628/\u62a5\u4ef7\u5355-SXDD-20260628001.pdf": { - "mtime": 1782629430.0, - "hash": "d25c0bd51a087eb09117ddfc62c025c0" + "README.md": { + "mtime": 1780114581.0, + "ast_hash": "bc7b9cd033927a3f580cd89c5deb6494", + "semantic_hash": "" }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260712/\u62a5\u4ef7\u5355-YDDD-20260712001.pdf": { - "mtime": 1783824913.0, - "hash": "c63ccb7b582c75bde2e61e1317424896" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260531/\u62a5\u4ef7\u5355-SXDD-20260531003.pdf": { - "mtime": 1780224094.0, - "hash": "e83e99a6bd7d69a4072331c8488c0444" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260606/\u62a5\u4ef7\u5355-SXDD-20260606005.pdf": { - "mtime": 1780746193.0, - "hash": "c7b8ef3aacb608c79157ca0a4b02fc3c" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260606/\u62a5\u4ef7\u5355-SXDD-20260606003.pdf": { - "mtime": 1780737430.0, - "hash": "79d5aedaa01d9fb9c5351cf191b6b0d2" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260606/\u62a5\u4ef7\u5355-SXDD-20260606002.pdf": { - "mtime": 1780737270.0, - "hash": "6f6a08d3a1b701a2360f67164d7e5a65" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260606/\u62a5\u4ef7\u5355-SXDD-20260606001.pdf": { - "mtime": 1780736409.0, - "hash": "1d3607b24b058d4bc248104891fb9c88" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260720/\u62a5\u4ef7\u5355-SXDD-20260720001.pdf": { - "mtime": 1784513559.0, - "hash": "8a279d2e933e3e029622b7229b43ba41" - }, - "/Users/zlwu/work/00code/shanxia2.0/backend/uploads/quote/20260720/\u62a5\u4ef7\u5355-SXDD-20260720002.pdf": { - "mtime": 1784521467.0, - "hash": "fd482a595c7054de3e2c4831b2bfb6a0" + "requirements.txt": { + "mtime": 1784035957.0, + "ast_hash": "ab08de9f2031a70cabd3e6652131daaf", + "semantic_hash": "" } } \ No newline at end of file diff --git a/backend/graphify-out/GRAPH_REPORT.md b/backend/graphify-out/GRAPH_REPORT.md index 6b384910a..f51a32597 100644 --- a/backend/graphify-out/GRAPH_REPORT.md +++ b/backend/graphify-out/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - backend (2026-08-01) ## Corpus Check -- 301 files · ~206,587 words +- 301 files · ~206,684 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 4540 nodes · 15450 edges · 528 communities (512 shown, 16 thin omitted) -- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 411 edges (avg confidence: 0.53) +- 4543 nodes · 15453 edges · 531 communities (513 shown, 18 thin omitted) +- Extraction: 97% EXTRACTED · 3% INFERRED · 0% AMBIGUOUS · INFERRED: 410 edges (avg confidence: 0.53) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `ce75576f` +- Built from commit: `e59b2aa6` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -141,11 +141,14 @@ - [[_COMMUNITY_backfill_crm_contract_attachment_urls.py|backfill_crm_contract_attachment_urls.py]] - [[_COMMUNITY_BaseStorage|BaseStorage]] - [[_COMMUNITY_login_crypto.py|login_crypto.py]] +- [[_COMMUNITY_get_current_user_by_token|get_current_user_by_token]] - [[_COMMUNITY_codeblock1 (iflytekshanxia2.0backend)|code:block1 (/iflytek/shanxia2.0/backend)]] - [[_COMMUNITY_test_quote_approver_setting.py|test_quote_approver_setting.py]] - [[_COMMUNITY_LocalStorage|LocalStorage]] - [[_COMMUNITY_MinIOStorage|MinIOStorage]] +- [[_COMMUNITY_.to_tenant_user_dict|.to_tenant_user_dict]] - [[_COMMUNITY_datetime_parse.py|datetime_parse.py]] +- [[_COMMUNITY_SoftDeleteModel|SoftDeleteModel]] - [[_COMMUNITY_menu.py|menu.py]] - [[_COMMUNITY_crm_quote_pdf.py|crm_quote_pdf.py]] - [[_COMMUNITY_shanxia2.0 后端骨架(FastAPI)|shanxia2.0 后端骨架(FastAPI)]] @@ -194,247 +197,247 @@ ## Import Cycles - None detected. -## Communities (528 total, 16 thin omitted) +## Communities (531 total, 18 thin omitted) ### Community 0 - "Community 0" -Cohesion: 0.18 -Nodes (20): _build_public_page(), _format_file_size(), _format_plan_date(), get_public_transport(), _get_transport_by_token(), _parse_feedback_images(), Session, UploadFile (+12 more) +Cohesion: 0.14 +Nodes (15): BxAdvanceApply, BxAdvanceApproval, AdvanceService, Any, Session, 同一节点多次审批时,取 approval_time 最新的一条作为当前节点状态。, 返回全部审批动作,按时间正序排列,用于展示完整审批历史。, current_month_bounds() (+7 more) ### Community 1 - "Community 1" -Cohesion: 0.13 -Nodes (23): ProcessDefCreateBody, ProcessDefUpdateBody, PublishVersionBody, StartInstanceBody, 流程定义版本 wf_process_version, 流程实例 wf_process_instance, WfNode, WfProcessInstance (+15 more) +Cohesion: 0.28 +Nodes (5): PublishVersionBody, WfNode, Any, Session, WorkflowEngine ### Community 2 - "Community 2" -Cohesion: 0.27 -Nodes (11): assert_carrier_eligible_for_transport(), carrier_agreement_expired(), carrier_audit_approved(), carrier_eligible_for_transport(), carrier_qualification_complete(), date, 资质附件均为选填,保留函数签名供兼容调用。, _urls_nonempty() (+3 more) +Cohesion: 0.30 +Nodes (12): PlCarrier, assert_carrier_eligible_for_transport(), carrier_agreement_expired(), carrier_audit_approved(), carrier_eligible_for_transport(), carrier_qualification_complete(), date, 资质附件均为选填,保留函数签名供兼容调用。 (+4 more) ### Community 3 - "Community 3" -Cohesion: 0.08 -Nodes (100): attachment_download_url(), attachment_preview_url(), AttachmentDownloadUrlBody, create_dept(), create_dict_data(), create_dict_type(), create_menu(), create_post() (+92 more) +Cohesion: 0.07 +Nodes (66): attachment_download_url(), attachment_preview_url(), create_dept(), create_dict_data(), create_dict_type(), create_menu(), create_post(), create_role_management() (+58 more) ### Community 4 - "Community 4" -Cohesion: 0.12 -Nodes (61): _apply_list_filters(), assign_opportunities(), batch_update_expect_date(), batch_update_stage(), change_stage(), create_opportunity(), _decimal_value(), _enrich_user_names() (+53 more) +Cohesion: 0.17 +Nodes (43): _apply_list_filters(), assign_opportunities(), batch_update_expect_date(), batch_update_stage(), change_stage(), create_opportunity(), _decimal_value(), _enrich_user_names() (+35 more) ### Community 5 - "Community 5" Cohesion: 0.20 Nodes (24): count_source_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings(), load_settings_env(), load_user_mapping() (+16 more) ### Community 6 - "Community 6" -Cohesion: 0.13 -Nodes (48): PlPlan, PlPlanProduct, 计划产品明细表 pl_plan_product, PlanArchiveFreightBlock, PlanArchiveProductItem, PlanTransportCreateBlock, all_hazard_products_cert_complete(), apply_archive_freight() (+40 more) +Cohesion: 0.27 +Nodes (26): AttachmentDownloadUrlBody, DeptCreateBody, DeptUpdateBody, DictDataCreateBody, DictDataUpdateBody, DictTypeCreateBody, DictTypeUpdateBody, MenuCreateBody (+18 more) ### Community 7 - "Community 7" Cohesion: 0.12 Nodes (36): get_password_hash(), Namespace, build_merged_users(), bx_role_labels(), check_minio(), check_mysql(), check_redis(), _clip() (+28 more) ### Community 8 - "Community 8" -Cohesion: 0.10 -Nodes (51): create_from_quote(), _quote_products_to_contract_products(), Java: createFromQuote — 返回合同 id, _build_quote_filters(), calculate_quote_amount(), create_quote(), _decimal_value(), _enrich_contact_fields() (+43 more) +Cohesion: 0.09 +Nodes (71): register_quote_routes(), create_from_quote(), _quote_products_to_contract_products(), Java: createFromQuote — 返回合同 id, accept_quote(), _build_quote_filters(), calculate_quote_amount(), create_new_version() (+63 more) ### Community 11 - "Community 11" -Cohesion: 0.10 -Nodes (55): cancel_apply(), create_apply(), create_disburse(), delete_applies(), delete_disburses(), get_apply(), get_disburse(), list_applies() (+47 more) +Cohesion: 0.11 +Nodes (54): cancel_apply(), create_apply(), create_disburse(), delete_applies(), delete_disburses(), get_apply(), get_disburse(), list_applies() (+46 more) ### Community 12 - "Community 12" -Cohesion: 0.04 -Nodes (89): contact_add(), contact_delete(), contact_update(), customer_create(), customer_delete(), customer_update(), pool_customer_assign(), pool_customer_claim() (+81 more) +Cohesion: 0.07 +Nodes (43): AttachmentUploadResponse, ChangePasswordRequest, Config, LoginRequest, LoginResponse, Pydantic schemas - 用户认证, ResetPasswordRequest, UserCreate (+35 more) ### Community 13 - "Community 13" -Cohesion: 0.16 -Nodes (30): create_instance(), create_process_def(), create_task(), get_all_tasks_for_business(), get_instance(), get_latest_version(), get_nodes_by_version(), get_pending_tasks_by_node() (+22 more) +Cohesion: 0.19 +Nodes (26): create_instance(), create_process_def(), get_all_tasks_for_business(), get_instance(), get_nodes_by_version(), get_process_def(), get_transitions_by_version(), list_completed_tasks() (+18 more) ### Community 14 - "Community 14" -Cohesion: 0.11 -Nodes (45): check_document_expiry(), document_reminder_stats(), get_inventory_ledger(), get_summary(), list_document_reminders(), list_transactions(), list_warnings(), date (+37 more) +Cohesion: 0.10 +Nodes (47): check_document_expiry(), document_reminder_stats(), get_inventory_ledger(), get_summary(), list_document_reminders(), list_transactions(), list_warnings(), date (+39 more) ### Community 15 - "Community 15" -Cohesion: 0.11 -Nodes (16): BxReimburseApply, BxReimburseApproval, BxReimburseDetail, BxReimburseInvoice, BxReimburseOffset, 报销单勾选的发票附件(同一发票可勾选多个附件,各占一条)。, ReimburseApplyOut, ReimburseInvoiceBriefOut (+8 more) +Cohesion: 0.10 +Nodes (41): approve_reimburse(), approved_by_me(), _build_details_data(), create_reimburse(), delete_reimburse(), get_approval_history(), get_approvals(), get_generated_title() (+33 more) ### Community 16 - "Community 16" Cohesion: 0.09 -Nodes (64): cancel_apply(), create_apply(), create_record(), delete_applies(), delete_records(), get_apply(), get_record(), list_applies() (+56 more) +Nodes (60): cancel_apply(), create_apply(), create_record(), delete_applies(), delete_records(), get_apply(), get_record(), list_applies() (+52 more) ### Community 18 - "Community 18" -Cohesion: 0.09 -Nodes (38): advance_pending_approval_stats(), advance_status_counts(), approve_advance(), approved_by_me(), create_advance(), delete_advance(), _fill_offset_amounts(), get_advance() (+30 more) +Cohesion: 0.11 +Nodes (53): advance_pending_approval_stats(), advance_status_counts(), approve_advance(), approved_by_me(), create_advance(), delete_advance(), _fill_offset_amounts(), get_advance() (+45 more) ### Community 19 - "Community 19" -Cohesion: 0.09 -Nodes (46): _avatar_url_field(), _build_user_info_payload(), change_current_user_password(), get_current_user_profile(), _jwt_user_payload(), logout(), public_quote_share(), Request (+38 more) +Cohesion: 0.16 +Nodes (20): _avatar_url_field(), _build_user_info_payload(), _jwt_user_payload(), logout(), 公共接口(Web 登录、刷新 Token、登出;用户模型对齐 docs/sql/shanxia2.0.sql 基线), 登出:吊销 Redis 会话(若已配置 REDIS_HOST)。, 与 web-admin 静态路由 meta.roles(admin/super_admin)对齐的单元素数组。, 与 web-admin `userInfo` 字段约定一致。 (+12 more) ### Community 21 - "Community 21" -Cohesion: 0.08 -Nodes (63): _alias_row_to_dict(), _assert_brand_deletable(), barcode_exists(), _brand_row_to_dict(), _build_category_tree(), category_code_exists(), _category_row_to_dict(), _collect_category_with_ancestors() (+55 more) +Cohesion: 0.07 +Nodes (70): _alias_row_to_dict(), _assert_brand_deletable(), barcode_exists(), _brand_row_to_dict(), _build_category_tree(), category_code_exists(), _collect_category_with_ancestors(), create_category() (+62 more) ### Community 22 - "Community 22" Cohesion: 0.08 Nodes (28): parse_admin_request_json(), Any, Request, 运营 Web(/web/admin)JSON 请求体解析。 与 ApiCryptoMiddleware 配合:中间件未改写 body 时,在路由内解密 `{, 读取 JSON body;dict 时走 resolve_request_payload(明文 / 密文 / data 包装)。 Returns:, ApiCryptoError, _b64url_decode(), _b64url_encode() (+20 more) ### Community 23 - "Community 23" -Cohesion: 0.11 -Nodes (8): convert_heic_to_jpeg(), OSSStorage, process_image_content(), QiniuStorage, 文件存储工具模块 支持多种存储方式: 1. 本地存储 (local) - 默认 2. 七牛云存储 (qiniu) - 推荐生产环境使用 3. 阿里云OSS (, 将 HEIC/HEIF 格式转换为 JPEG 格式, 处理图片内容,如果是 HEIC 格式则转换为 JPEG, BytesIO +Cohesion: 0.15 +Nodes (6): convert_heic_to_jpeg(), OSSStorage, process_image_content(), 将 HEIC/HEIF 格式转换为 JPEG 格式, 处理图片内容,如果是 HEIC 格式则转换为 JPEG, BytesIO ### Community 24 - "Community 24" -Cohesion: 0.16 -Nodes (15): ApiRequestLogCRUD, Session, list_ethnics(), Any, Session, 民族码表 CRUD(全局 sys_ethnic), _row_to_dict(), 数据模型(与 docs/sql/shanxia2.0.sql 全库导出基线对齐的核心系统表) (+7 more) +Cohesion: 0.50 +Nodes (4): ApiRequestLogCRUD, Session, SysApiRequestLog, SysApiRequestLogHis ### Community 25 - "Community 25" -Cohesion: 0.10 -Nodes (64): get_plan_arrange_info(), 获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。, _apply_plan_logistics_from_payload(), _apply_transport_arrange_fields(), arrange_transport(), _assert_vehicle_carrier_eligible(), _build_arrange_result(), _build_driver_url() (+56 more) +Cohesion: 0.07 +Nodes (84): _build_driver_url(), get_plan_arrange_info(), 获取计划已安排运输后的司机链接与地磅出入库关联(供查看弹窗复制简述/二维码)。, _build_public_page(), _format_file_size(), _format_plan_date(), get_public_transport(), _get_transport_by_token() (+76 more) ### Community 26 - "Community 26" -Cohesion: 0.09 -Nodes (58): register_contract_routes(), delete_pending_approvals(), Java: withdraw — 软删除 pending 审批, batch_assign_owner(), batch_submit_contract_approval(), _contract_period_key(), contract_row_to_dict(), create_from_opportunity() (+50 more) +Cohesion: 0.10 +Nodes (45): CRM 合同 API 路由 — GET/PUT/DELETE/POST 对齐原 Java CRM, register_contract_routes(), 运营端角色守卫:admin / super_admin 可访问。, 接口菜单权限守卫。super_admin 直接放行。, require_admin_or_super_admin(), require_menu_code(), batch_assign_owner(), batch_submit_contract_approval() (+37 more) ### Community 27 - "Community 27" -Cohesion: 0.19 -Nodes (28): _apply_plan_product_update(), _apply_plan_update(), AutoGenerateMonthlyResult, _base_query(), create_plan(), delete_plan(), _generate_plan_no(), get_plan() (+20 more) +Cohesion: 0.13 +Nodes (33): _apply_plan_product_update(), _apply_plan_update(), AutoGenerateMonthlyResult, _base_query(), create_plan(), delete_plan(), _generate_plan_no(), get_plan() (+25 more) ### Community 28 - "Community 28" -Cohesion: 0.12 -Nodes (53): PlFreightSettlement, PlFreightSettlementApproval, 运费结算表 pl_freight_settlement, 运费结算审批 pl_freight_settlement_approval, _advance_after_approval(), _approval_to_dict(), can_user_approve_settlement(), cancel_draft_settlement() (+45 more) +Cohesion: 0.11 +Nodes (57): PlFreightSettlement, PlFreightSettlementApproval, PlFreightSettlementTransport, PlRemittanceVoucher, 运费结算表 pl_freight_settlement, 运费结算审批 pl_freight_settlement_approval, 结算单-运输关联表 pl_freight_settlement_transport, 汇款凭证表 pl_remittance_voucher (+49 more) ### Community 29 - "Community 29" -Cohesion: 0.17 -Nodes (24): _build_public_page(), _build_site_product_read(), _format_file_size(), get_public_site(), _get_site_link_by_token(), _parse_feedback_images(), Session, UploadFile (+16 more) +Cohesion: 0.11 +Nodes (31): _build_public_page(), _build_site_product_read(), _format_file_size(), get_public_site(), _get_site_link_by_token(), _parse_feedback_images(), Session, UploadFile (+23 more) ### Community 30 - "Community 30" Cohesion: 0.10 -Nodes (33): menu_badge_stats(), Session, Session, recognize_cert(), RecognizeCertBody, RecognizeCertResult, _address_to_read(), _build_address_query() (+25 more) +Nodes (34): menu_badge_stats(), Session, Session, recognize_cert(), RecognizeCertBody, RecognizeCertResult, _address_to_read(), _build_address_query() (+26 more) ### Community 33 - "Community 33" -Cohesion: 0.20 -Nodes (15): bind_biz(), delete_attachment(), download_file(), list_by_biz(), _parse_id_list(), preview_attachment(), Session, UploadFile (+7 more) +Cohesion: 0.13 +Nodes (22): bind_biz(), delete_attachment(), download_file(), list_by_biz(), _parse_id_list(), preview_attachment(), Session, UploadFile (+14 more) ### Community 34 - "Community 34" -Cohesion: 0.14 -Nodes (42): assign_customer(), batch_claim_customers(), check_duplicate_customer(), claim_customer(), create_customer(), deal_customer(), _enrich_user_names(), _ensure_customer_in_scope() (+34 more) +Cohesion: 0.11 +Nodes (49): customer_create(), customer_update(), follow_by_customer(), follow_detail(), assign_customer(), batch_claim_customers(), check_duplicate_customer(), claim_customer() (+41 more) ### Community 35 - "Community 35" Cohesion: 0.18 Nodes (36): clear_portal_workflow(), _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_bx_user_mapping(), load_runtime_settings() (+28 more) ### Community 36 - "Community 36" -Cohesion: 0.09 -Nodes (37): API 路由包 — 山峡化工生产一体化门户, get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,14 个一级菜单), approve_task(), _assert_wf_instance_in_scope(), _business_type_label(), create_process_def(), delete_process_def() (+29 more) +Cohesion: 0.18 +Nodes (25): approve_task(), _assert_wf_instance_in_scope(), _business_type_label(), create_process_def(), delete_process_def(), _enrich_task_list(), get_business_all_tasks(), _get_business_form_fields() (+17 more) ### Community 37 - "Community 37" Cohesion: 0.24 Nodes (18): _actor_ids(), _actor_names(), assert_row_deletable_by_creator(), assert_rows_deletable_by_creator(), can_delete_by_creator(), is_super_admin(), normalize_user_info(), Any (+10 more) ### Community 38 - "Community 38" -Cohesion: 0.13 -Nodes (28): generate_uuid(), PlInventoryTransaction, 库存流水表 pl_inventory_transaction, load_brand_qtys_by_plan_product_ids(), persist_plan_product_brand_qtys(), Any, Decimal, Session (+20 more) +Cohesion: 0.21 +Nodes (15): load_brand_qtys_by_plan_product_ids(), persist_plan_product_brand_qtys(), Any, Decimal, Session, 按计划产品明细 ID 批量加载归档品牌数量(brandId/brandName/qty)。, 软删旧品牌量行后按归档结果插入;无品牌约定则只软删不插入。, validate_brand_qty_rows() (+7 more) ### Community 39 - "Community 39" Cohesion: 0.22 -Nodes (28): assign_clues(), check_convert(), check_duplicate_clue(), convert_clue(), create_clue(), _enrich_user_names(), _ensure_clue_in_scope(), get_clue() (+20 more) +Nodes (27): assign_clues(), check_convert(), check_duplicate_clue(), convert_clue(), create_clue(), _enrich_user_names(), _ensure_clue_in_scope(), get_clue() (+19 more) ### Community 42 - "Community 42" -Cohesion: 0.20 -Nodes (31): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+23 more) +Cohesion: 0.19 +Nodes (32): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+24 more) ### Community 43 - "Community 43" Cohesion: 0.10 -Nodes (32): create_invoice(), delete_invoice(), get_mine_wallet_summary(), list_invoice_ledgers(), list_invoice_wallets(), list_invoices(), Request, Session (+24 more) +Nodes (30): bx_health(), 报销(bx)API 路由聚合 — REST 风格,协议对齐 bx 原系统。, P0 健康检查:验证 bx 路由已挂载且响应协议为 code=0。, create_invoice(), delete_invoice(), get_mine_wallet_summary(), list_invoice_ledgers(), list_invoice_wallets() (+22 more) ### Community 44 - "Community 44" -Cohesion: 0.15 -Nodes (14): _db_pool_keepalive_loop(), _error_json(), lifespan(), Exception, Request, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin, 定期 ping MySQL,避免远程库/NAT 回收空闲 TCP 后首请求长时间卡住。 (+6 more) +Cohesion: 0.13 +Nodes (16): ApiCryptoMiddleware, _db_pool_keepalive_loop(), _error_json(), lifespan(), Exception, Request, 数据库异常:返回 JSON 并保留 CORS 头,避免浏览器只报跨域错误, 未捕获异常:统一 JSON 500,确保跨域场景下仍有 Access-Control-Allow-Origin (+8 more) ### Community 45 - "Community 45" -Cohesion: 0.19 -Nodes (17): ApiRequestLogMiddleware, _claims_from_auth(), _format_body_bytes(), _persist_log(), Any, Request, 统一记录 API 请求/响应出入参的中间件, _redact_obj() (+9 more) +Cohesion: 0.22 +Nodes (15): ApiRequestLogMiddleware, _claims_from_auth(), _format_body_bytes(), _persist_log(), Any, Request, 统一记录 API 请求/响应出入参的中间件, _redact_obj() (+7 more) ### Community 46 - "Community 46" Cohesion: 0.18 Nodes (17): get_oper_log_meta(), OperLogMeta, 请求级操作日志元数据(ContextVar), 供异步落库线程使用,避免 ContextVar 跨线程丢失。, set_oper_log_meta(), snapshot_oper_log_meta(), _format_summary(), oper_log() (+9 more) ### Community 48 - "Community 48" -Cohesion: 0.18 -Nodes (27): _apply_inventory_product_update(), _apply_inventory_update(), _base_query(), create_inventory(), create_link_for_plan(), delete_inventory(), _generate_batch_no(), _get_inventory() (+19 more) +Cohesion: 0.20 +Nodes (28): _apply_inventory_product_update(), _apply_inventory_update(), _base_query(), create_inventory(), create_link_for_plan(), delete_inventory(), _generate_batch_no(), _get_inventory() (+20 more) ### Community 49 - "Community 49" Cohesion: 0.07 -Nodes (47): _build_page(), _get_by_token(), _models(), Session, 运输计划 · 入库/出库单现场免登录公共 API, QrCodeResponse, SoftDeleteModel, BizAttachment (+39 more) +Nodes (50): _build_page(), _get_by_token(), _make_handlers(), _models(), Session, 运输计划 · 入库/出库单现场免登录公共 API, BizAttachment, PlDocumentReminder (+42 more) ### Community 50 - "Community 50" -Cohesion: 0.11 -Nodes (37): approve_settlement_legacy(), cancel_settlement(), create_settlement(), delete_settlement(), disburse_settlement(), _generate_settlement_no(), get_settlement(), get_settlement_approval_flow() (+29 more) +Cohesion: 0.13 +Nodes (34): approve_settlement_legacy(), cancel_settlement(), create_settlement(), delete_settlement(), disburse_settlement(), _generate_settlement_no(), get_settlement(), get_settlement_approval_flow() (+26 more) ### Community 51 - "Community 51" -Cohesion: 0.14 -Nodes (24): PlTransportProductBrandQty, PlTransportProductFeedback, 运输单按产品回传 pl_transport_product_feedback, 运输单产品回传品牌数量 pl_transport_product_brand_qty, _dict_field(), format_brand_qty_summary(), load_transport_driver_product_feedbacks(), persist_io_item_brand_qtys() (+16 more) +Cohesion: 0.11 +Nodes (32): generate_uuid(), CrmProductBrand, PlTransportProductBrandQty, PlTransportProductFeedback, 运输单按产品回传 pl_transport_product_feedback, 运输单产品回传品牌数量 pl_transport_product_brand_qty, _dict_field(), format_brand_qty_summary() (+24 more) ### Community 52 - "Community 52" Cohesion: 0.18 Nodes (29): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+21 more) ### Community 53 - "Community 53" -Cohesion: 0.10 -Nodes (36): 报销模块认证适配:门户 JWT 用户 → bx 业务上下文。, filter_current_cycle_approvals(), 审批轮次过滤 — 驳回后重新提交时,进度接口仅展示当前轮次。, 审批进度仅展示当前轮次;完整历史由 get_approval_history 返回。, 报销模块 Service 基类 — 租户隔离 + UUID + 软删除。, assert_bx_attachment_biz_in_scope(), assert_bx_biz_in_scope(), assert_bx_row_in_scope() (+28 more) +Cohesion: 0.12 +Nodes (29): 报销模块认证适配:门户 JWT 用户 → bx 业务上下文。, filter_current_cycle_approvals(), 审批轮次过滤 — 驳回后重新提交时,进度接口仅展示当前轮次。, 审批进度仅展示当前轮次;完整历史由 get_approval_history 返回。, 报销模块 Service 基类 — 租户隔离 + UUID + 软删除。, apply_bx_scope(), assert_bx_attachment_biz_in_scope(), assert_bx_biz_in_scope() (+21 more) ### Community 54 - "Community 54" -Cohesion: 0.19 -Nodes (28): _get_by_plan(), get_inbound(), get_inbound_by_plan(), _get_order(), get_outbound(), get_outbound_by_plan(), inbound_site_url(), list_inbound() (+20 more) +Cohesion: 0.26 +Nodes (23): _get_by_plan(), get_inbound(), get_inbound_by_plan(), _get_order(), get_outbound(), get_outbound_by_plan(), inbound_site_url(), list_inbound() (+15 more) ### Community 58 - "Community 58" -Cohesion: 0.17 -Nodes (20): operlog_detail(), operlog_list(), Session, 操作日志分页列表(基于 API 请求日志适配 RuoYi OperLog 结构), _user_info(), 获取用户所有角色的数据权限配置。 返回: [{"data_scope": str, "details": [SysRoleDataScopeDetai, _resolve_user_role_scopes(), _apply_oper_log_scope() (+12 more) +Cohesion: 0.25 +Nodes (14): 获取用户所有角色的数据权限配置。 返回: [{"data_scope": str, "details": [SysRoleDataScopeDetai, _resolve_user_role_scopes(), business_type_from_path(), title_from_path(), _apply_oper_log_scope(), get_oper_log(), list_oper_logs(), _oper_log_row_in_scope() (+6 more) ### Community 59 - "Community 59" Cohesion: 0.20 Nodes (28): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_oss_id_to_url(), load_runtime_settings(), load_settings_env() (+20 more) ### Community 60 - "Community 60" -Cohesion: 0.09 -Nodes (37): advance_issue_stats(), batch_offset(), export_advance_issues(), issue_advance(), list_advance_issues(), list_advance_offset_records(), list_pending_payments(), list_processed_payments() (+29 more) +Cohesion: 0.13 +Nodes (11): _coerce_id(), OffsetItem, PaymentFinanceStatsOut, 报销单勾选的发票附件(同一发票可勾选多个附件,各占一条)。, ReimburseApplyCreate, ReimburseApprovalOut, ReimburseApproverPendingStatsOut, ReimburseDetailCreate (+3 more) ### Community 61 - "Community 61" -Cohesion: 0.18 -Nodes (25): apply_product_snapshot_to_inventory(), apply_product_snapshot_to_plan(), ProductSnapshot, Session, 地磅模块 — CRM 产品解析与快照写入。, 校验 CRM 产品并返回名称/规格快照。新建单据 product_id 必填。, resolve_crm_product(), _create_db_inventory() (+17 more) +Cohesion: 0.16 +Nodes (33): DbPurchasePlan, PlTransportDbLink, 运输-地磅出入库关联 pl_transport_db_link, _apply_plan_quantity_delta(), _create_db_inventory(), _create_db_plan(), DibangInventoryLinkResult, find_monthly_db_plan() (+25 more) ### Community 62 - "Community 62" Cohesion: 0.21 Nodes (22): clear_target_products(), count_target_rows(), _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings() (+14 more) ### Community 63 - "Community 63" -Cohesion: 0.17 -Nodes (30): bx_health(), 报销(bx)API 路由聚合 — REST 风格,协议对齐 bx 原系统。, P0 健康检查:验证 bx 路由已挂载且响应协议为 code=0。, approve_reimburse(), approved_by_me(), _build_details_data(), create_reimburse(), delete_reimburse() (+22 more) +Cohesion: 0.15 +Nodes (16): 数据模型(与 docs/sql/shanxia2.0.sql 全库导出基线对齐的核心系统表), Web 管理端约定角色(由 sys_role.role_name 映射而来,非数据库枚举), 流程实例 wf_process_instance, UserRole, WfProcessInstance, _dispatch_local(), Any, 工作流回调服务 —— 流程状态变更时通知业务系统 (+8 more) ### Community 64 - "Community 64" -Cohesion: 0.04 -Nodes (184): category_add(), category_delete(), category_tree(), category_update(), clue_assign(), clue_convert(), clue_create(), clue_delete() (+176 more) +Cohesion: 0.05 +Nodes (158): clue_check_convert(), clue_check_duplicate(), clue_export(), clue_follow_statistics(), clue_list(), clue_mine(), clue_park_area_list(), clue_statistics_overview() (+150 more) ### Community 65 - "Community 65" Cohesion: 0.10 -Nodes (58): cancel_apply(), create_apply(), create_process(), delete_applies(), delete_processes(), get_apply(), get_process(), list_applies() (+50 more) +Nodes (62): cancel_apply(), create_apply(), create_process(), delete_applies(), delete_processes(), get_apply(), get_process(), list_applies() (+54 more) ### Community 66 - "Community 66" -Cohesion: 0.14 -Nodes (25): create_workflow(), delete_workflow(), get_workflow(), get_workflow_by_biz_type(), list_workflows(), Session, save_workflow_nodes(), update_workflow() (+17 more) +Cohesion: 0.17 +Nodes (19): create_workflow(), delete_workflow(), get_workflow(), get_workflow_by_biz_type(), list_workflows(), Session, save_workflow_nodes(), update_workflow() (+11 more) ### Community 67 - "Community 67" Cohesion: 0.29 -Nodes (16): ensure_crm_customer_linked_row_in_scope(), ensure_crm_owner_row_in_scope(), Session, CRM 数据权限辅助(负责人 owner_user_id + 标准 create_by/create_dept_id)。, 客户子表(开票信息等):先校验关联客户 owner scope,否则校验 create_by。, _clear_default_for_customer(), create_invoice_info(), get_invoice_info() (+8 more) +Nodes (16): clue_detail(), customer_detail(), ensure_crm_customer_linked_row_in_scope(), ensure_crm_owner_row_in_scope(), 客户子表(开票信息等):先校验关联客户 owner scope,否则校验 create_by。, _clear_default_for_customer(), create_invoice_info(), get_invoice_info() (+8 more) ### Community 68 - "Community 68" -Cohesion: 0.22 -Nodes (20): register_quote_routes(), accept_quote(), create_new_version(), generate_pdf(), generate_share(), _get_quote_in_scope(), get_template(), invalid_quote() (+12 more) +Cohesion: 0.34 +Nodes (18): batch_add_opportunity_products(), _calc_subtotal(), create_opportunity_product(), _decimal_value(), _fill_product_redundant(), _get_opportunity_for_product(), get_opportunity_product(), list_opportunity_products() (+10 more) ### Community 69 - "Community 69" Cohesion: 0.15 -Nodes (23): _append_user_scope_conditions(), apply_data_scope(), _collect_scope_ids(), _get_child_dept_ids(), get_user_dept_id(), Session, 合并多角色数据范围为 dept_ids / user_ids 并集。, 根据用户角色的数据权限过滤查询。 适用于业务单据列表/详情(报销单、客户、运单等)。 以下场景 SHALL NOT 调用本函数(仅租户隔离即 (+15 more) +Nodes (25): _append_user_scope_conditions(), apply_data_scope(), assert_row_in_data_scope(), _collect_scope_ids(), _get_child_dept_ids(), get_user_dept_id(), Session, 数据权限过滤(V0.3:基于角色 data_scope 的查询级行级过滤) data_scope 值: 1 = 全部数据 2 = 本部门数据 3 (+17 more) ### Community 70 - "Community 70" -Cohesion: 0.19 -Nodes (20): create_post(), get_post(), list_posts(), post_code_exists(), Any, Session, _row_to_dict(), soft_delete_post() (+12 more) +Cohesion: 0.39 +Nodes (10): create_post(), get_post(), list_posts(), post_code_exists(), Any, Session, _row_to_dict(), soft_delete_post() (+2 more) ### Community 71 - "Community 71" -Cohesion: 0.10 -Nodes (33): CRM 报价单 API 路由 — 挂接到 crm.router, total_pages(), QuoteApproverSettingSaveBody, QuoteAcceptBody, QuoteApprovalApproveBody, QuoteApprovalListBody, QuoteApprovalRefreshNamesBody, QuoteApprovalWithdrawBody (+25 more) +Cohesion: 0.05 +Nodes (68): CRM 报价单 API 路由 — 挂接到 crm.router, BaseModel, InvoiceAttachmentOut, InvoiceOut, LedgerOut, WalletSummaryOut, ContactByCustomerBody, ContactDetailBody (+60 more) ### Community 72 - "Community 72" Cohesion: 0.19 @@ -457,20 +460,20 @@ Cohesion: 0.16 Nodes (26): clear_target_categories(), compute_level(), count_target_rows(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), load_runtime_settings() (+18 more) ### Community 81 - "Community 81" -Cohesion: 0.38 -Nodes (10): create_leave(), delete_leave(), get_leave(), _leave_local_callback(), leave_workflow_callback(), list_leaves(), Session, submit_leave() (+2 more) +Cohesion: 0.22 +Nodes (14): format_datetime(), get_current_time(), parse_datetime(), datetime, datetime_end_of_day(), fmt_date(), fmt_datetime(), inventory_date_to_api() (+6 more) ### Community 83 - "Community 83" Cohesion: 0.09 -Nodes (52): CRM 合同子模块路由 — 变更/模板/审批独立页, register_contract_sub_routes(), _advance_contract_after_approval(), approve_contract(), approve_contract_by_contract_id(), approve_pass(), approve_reject(), approve_transfer() (+44 more) +Nodes (53): CRM 合同子模块路由 — 变更/模板/审批独立页, register_contract_sub_routes(), _advance_contract_after_approval(), approve_contract(), approve_contract_by_contract_id(), approve_pass(), approve_reject(), approve_transfer() (+45 more) ### Community 84 - "Community 84" Cohesion: 0.23 Nodes (23): build_id_maps(), clip_text(), count_rows(), export_mapping(), fetch_rows(), legacy_id_to_str(), main(), map_id() (+15 more) ### Community 86 - "Community 86" -Cohesion: 0.14 -Nodes (36): _apply_weighing_product_update(), _apply_weighing_update(), _base_query(), create_weighing(), delete_weighing(), _get_weighing(), get_weighing_related(), list_weighing() (+28 more) +Cohesion: 0.19 +Nodes (26): _apply_weighing_product_update(), _apply_weighing_update(), _base_query(), create_weighing(), delete_weighing(), _get_weighing(), get_weighing_related(), list_weighing() (+18 more) ### Community 87 - "Community 87" Cohesion: 0.20 @@ -478,43 +481,43 @@ Nodes (19): approve_quote(), can_user_approve(), create_approval_records(), dele ### Community 88 - "Any" Cohesion: 0.18 -Nodes (30): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), legacy_parent_id(), load_oss_id_to_url(), load_runtime_settings() (+22 more) +Nodes (31): _dec(), derive_source_url(), fetch_portal_admin_id(), fetch_source_rows(), legacy_id_to_str(), legacy_parent_id(), load_oss_id_to_url(), load_runtime_settings() (+23 more) ### Community 89 - "pl_ocr_service.py" Cohesion: 0.19 Nodes (22): PlOcrUsageMonth, 阿里云 OCR 月度调用计数 pl_ocr_usage_month(按自然月全局统计), assert_quota_available(), _build_ocr_client(), compress_image_bytes(), current_usage_month(), _first_attachment_url(), get_or_create_usage_row() (+14 more) ### Community 91 - "pl_vehicle_recharge_service.py" -Cohesion: 0.12 -Nodes (40): _apply_contract_entity_fields(), _build_contract_filters(), _build_customer_address(), _calc_amount_with_tax(), _change_row_to_dict(), create_contract(), create_contract_change(), create_contract_template() (+32 more) +Cohesion: 0.10 +Nodes (58): _apply_contract_entity_fields(), _build_contract_filters(), _build_customer_address(), _calc_amount_with_tax(), _change_row_to_dict(), _contract_period_key(), contract_row_to_dict(), create_contract() (+50 more) ### Community 92 - "Community 92" Cohesion: 0.14 Nodes (29): 验证密码(哈希非 bcrypt 或损坏时返回 False,避免抛错), verify_password(), change_password(), create_user(), get_user(), get_user_with_relations(), _hash_password(), list_post_ids_for_user() (+21 more) ### Community 93 - "_invoice_info_by_customer_impl" -Cohesion: 0.29 -Nodes (16): create_contact(), get_contact(), list_contacts_by_customer(), _parse_optional_date(), Any, date, Session, _row_to_dict() (+8 more) +Cohesion: 0.23 +Nodes (19): contact_by_customer(), contact_detail(), contact_set_primary(), create_contact(), get_contact(), list_contacts_by_customer(), _parse_optional_date(), Any (+11 more) ### Community 94 - "response.py" -Cohesion: 0.15 -Nodes (30): create_clue_follow(), delete_clue_follow(), get_clue_follow(), get_follow_statistics(), list_clue_follows(), Any, Session, 更新线索跟进记录,必要时同步线索 next_time (+22 more) +Cohesion: 0.07 +Nodes (56): clue_follow_detail(), pool_rule_add(), pool_rule_delete(), pool_rule_detail(), pool_rule_execute(), pool_rule_list(), pool_rule_update(), pool_rule_update_status() (+48 more) ### Community 95 - "Community 95" -Cohesion: 0.35 -Nodes (11): create_tenant(), get_tenant(), list_tenants(), Any, Session, _row_to_dict(), soft_delete_tenant(), tenant_no_exists() (+3 more) +Cohesion: 0.21 +Nodes (13): Config, 文件存储工具模块 支持多种存储方式: 1. 本地存储 (local) - 默认 2. 七牛云存储 (qiniu) - 推荐生产环境使用 3. 阿里云OSS (, create_tenant(), get_tenant(), list_tenants(), Any, Session, _row_to_dict() (+5 more) ### Community 97 - "_ensure_subpack_slip_no" -Cohesion: 0.07 -Nodes (81): approve_carrier(), bind_vehicle_driver(), create_carrier(), create_driver(), create_personnel(), create_vehicle(), delete_carrier(), delete_driver() (+73 more) +Cohesion: 0.05 +Nodes (111): approve_carrier(), bind_vehicle_driver(), create_carrier(), create_driver(), create_personnel(), create_vehicle(), delete_carrier(), delete_driver() (+103 more) ### Community 100 - "price_letter_detail" Cohesion: 0.27 Nodes (15): Settings, BaseSettings, apply_renumber(), build_mapping(), fetch_products(), format_new_product_no(), load_settings_env(), main() (+7 more) ### Community 101 - ".to_tenant_user_dict" -Cohesion: 0.19 -Nodes (15): CRM 模块 Excel 导出列定义(字段与字典类型对齐 Java *Vo @ExcelDictFormat)。, _build_workbook(), DictLabelResolver, export_rows_to_xlsx_response(), ExportColumn, load_dict_label_maps(), Any, Session (+7 more) +Cohesion: 0.27 +Nodes (8): CRM 模块 Excel 导出列定义(字段与字典类型对齐 Java *Vo @ExcelDictFormat)。, _build_workbook(), DictLabelResolver, ExportColumn, Any, Excel 导出工具:集中处理字典 code → label(对齐 Java ExcelDictConvert / ExcelDictPreloadConver, 导出列定义,dict_type 非空时自动将字典 value 转为 label。, 导出单元格解析:按列配置做字典翻译或自定义格式化。 ### Community 102 - "dept.py" Cohesion: 0.33 @@ -525,48 +528,48 @@ Cohesion: 0.24 Nodes (7): camel_to_snake(), CRUDBase, get_model_attr(), HistoryCRUD, Any, Session, ModelType ### Community 105 - "list_customers" -Cohesion: 0.12 -Nodes (15): pool_rule_add(), pool_rule_delete(), pool_rule_detail(), pool_rule_execute(), pool_rule_list(), pool_rule_update(), pool_rule_update_status(), PoolRuleAddBody (+7 more) +Cohesion: 0.23 +Nodes (14): extend_session(), get_client_ip(), is_refresh_token_valid(), is_session_valid(), Request, 同步 Redis 调用;失败时返回 None 供调用方降级。, 刷新会话 TTL(已登录用户每次 API 校验通过后滑动续期), _redis_call_safe() (+6 more) ### Community 106 - "Community 106" -Cohesion: 0.17 -Nodes (16): parse_resource_snapshot(), Any, 运输计划 - 安排运输时车辆/人员/证件资源快照 Schema, 从 ORM 文本列或 dict 解析快照。, SnapshotCertRead, SnapshotPersonnelRow, TransportResourceSnapshot, build_personnel_summary() (+8 more) +Cohesion: 0.23 +Nodes (11): cancel_plan(), 作废运输计划:取消跟进状态、作废关联地磅出入库单、取消运输单。, _plan_type_to_business_type(), _normalize_plan_date(), date, Session, 运输计划 · 工厂现场链接(与地磅出入库单解耦), 入库/出库安排运输:按产品生成现场链接(不写 db_inbound_outbound)。 (+3 more) ### Community 107 - "apply_pl_scope" -Cohesion: 0.15 -Nodes (14): invoice_info_add(), invoice_info_by_customer(), _invoice_info_by_customer_impl(), invoice_info_delete(), invoice_info_list(), invoice_info_set_default(), invoice_info_update(), 按客户ID查询开票信息(与 by-customer 等价) (+6 more) +Cohesion: 0.05 +Nodes (77): category_add(), category_delete(), category_tree(), category_update(), clue_assign(), clue_convert(), clue_create(), clue_delete() (+69 more) ### Community 109 - "Community 109" -Cohesion: 0.15 -Nodes (17): create_expense_item(), delete_expense_item(), get_expense_item(), get_expense_item_tree(), Session, update_expense_item(), BxExpenseItem, _coerce_id() (+9 more) +Cohesion: 0.14 +Nodes (18): create_expense_item(), delete_expense_item(), get_expense_item(), get_expense_item_tree(), Session, update_expense_item(), get_bx_current_user(), BxExpenseItem (+10 more) ### Community 110 - "Base" Cohesion: 0.18 Nodes (17): get_web_auth_menu_codes(), 获取当前用户菜单权限标识(sys_menu.perms,经角色继承)。, get_user_menu_codes(), Session, 读取用户授权的菜单权限标识集合(与前端 meta.menuCode / perms 对齐)。, _expand_with_ancestor_menu_ids(), _granted_menu_ids_for_user(), iter_user_menu_perm_codes() (+9 more) ### Community 111 - "Community 111" -Cohesion: 0.21 -Nodes (17): _assert_editable(), _build_public_page(), _format_file_size(), _get_inventory_by_token(), get_public_inventory(), _parse_feedback_images(), Session, UploadFile (+9 more) +Cohesion: 0.28 +Nodes (14): _assert_editable(), _build_public_page(), _format_file_size(), _get_inventory_by_token(), get_public_inventory(), _parse_feedback_images(), Session, UploadFile (+6 more) ### Community 112 - "storage.py" -Cohesion: 0.21 -Nodes (16): _apply_list_filters(), create_supplier_info(), list_all_supplier_info(), list_supplier_info(), Any, Session, CRM 供方信息 CRUD — 对照 CrmSupplierInfoServiceImpl.java, Java: queryList(不分页,报价单下拉) (+8 more) +Cohesion: 0.08 +Nodes (35): 分页查询供方列表 — Java: CrmSupplierInfoController.list, 供方全量列表(下拉)— Java: CrmSupplierInfoController.listAll, 新增供方 — Java: CrmSupplierInfoController.add, 修改供方 — Java: CrmSupplierInfoController.edit, 删除供方 — Java: CrmSupplierInfoController.remove, 导出供方列表 — Java: CrmSupplierInfoController.export, supplier_info_add(), supplier_info_delete() (+27 more) ### Community 113 - "quote_share_log.py" Cohesion: 0.26 Nodes (12): list_share_logs(), _parse_user_agent(), Any, Session, CRM 报价单分享访问日志 CRUD — 对照 CrmQuoteShareLogServiceImpl.java, Java: statisticsVisits, 简易 User-Agent 解析(替代 Hutool UserAgentUtil), Java: queryLogsByQuoteId (+4 more) ### Community 114 - "db_models.py" -Cohesion: 0.24 -Nodes (12): DbSequence, 地磅(db)模块数据模型 — 对齐 docs/sql/db_tables.sql, _allocate_inbound_outbound_id(), _ensure_sequence_row(), max_numeric_inbound_outbound_id(), next_inbound_outbound_id(), Session, 出入库单 id 生成 — 租户内纯数字自增,并发安全。 (+4 more) +Cohesion: 0.27 +Nodes (10): DbSequence, 地磅(db)模块数据模型 — 对齐 docs/sql/db_tables.sql, _allocate_inbound_outbound_id(), _ensure_sequence_row(), max_numeric_inbound_outbound_id(), Session, 出入库单 id 生成 — 租户内纯数字自增,并发安全。, 当前租户下纯数字 id 的最大值(不含 UUID 等非数字主键)。 (+2 more) ### Community 115 - "site.py" -Cohesion: 0.33 -Nodes (8): allocate_next_biz_no(), _format_biz_no(), _prefix_for(), datetime, Session, 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, BizNoKind +Cohesion: 0.39 +Nodes (10): create_site(), get_site(), list_sites(), Any, Session, _row_to_dict(), site_code_exists(), soft_delete_site() (+2 more) ### Community 116 - "Community 116" -Cohesion: 0.20 -Nodes (24): batch_insert_quote_products(), calculate_subtotal(), _decimal_value(), delete_products_by_quote_id(), _ensure_quote_parent_scope(), _get_field(), get_quote_product(), insert_quote_product() (+16 more) +Cohesion: 0.19 +Nodes (25): calculate_subtotal(), _decimal_value(), delete_products_by_quote_id(), _ensure_quote_parent_scope(), _get_field(), get_quote_product(), insert_quote_product(), list_quote_products() (+17 more) ### Community 118 - "Community 118" Cohesion: 0.22 @@ -574,7 +577,7 @@ Nodes (22): batch_insert_contract_products(), calculate_subtotal(), _decimal_val ### Community 119 - "Community 119" Cohesion: 0.17 -Nodes (26): CertRow, _cert_row_complete(), collect_required_cert_errors(), _find_cert_for_required(), get_required_personnel_cert_names(), match_required_cert_name(), _missing_field_labels(), Session (+18 more) +Nodes (27): CertRow, VehiclePersonnelRow, _cert_row_complete(), collect_required_cert_errors(), _find_cert_for_required(), get_required_personnel_cert_names(), match_required_cert_name(), _missing_field_labels() (+19 more) ### Community 122 - "Community 122" Cohesion: 0.22 @@ -582,43 +585,43 @@ Nodes (15): get_storage(), download_file_bytes(), file_stream(), get_access_url( ### Community 125 - "Community 125" Cohesion: 0.10 -Nodes (45): 按运输计划单据类型解析地磅往来单位(不区分 CRM 合同类型)。 - 入库单 inbound:供方 → party_a,其次 supplier_nam, resolve_partner_company(), apply_dibang_prefill_to_order(), apply_site_feedback(), build_io_order_site_url(), create_io_order_for_transport(), _dibang_qty_by_plan_product(), enrich_io_items_with_brand_feedback() (+37 more) +Nodes (44): 按运输计划单据类型解析地磅往来单位(不区分 CRM 合同类型)。 - 入库单 inbound:供方 → party_a,其次 supplier_nam, resolve_partner_company(), apply_dibang_prefill_to_order(), apply_site_feedback(), build_io_order_site_url(), create_io_order_for_transport(), _dibang_qty_by_plan_product(), enrich_io_items_with_brand_feedback() (+36 more) ### Community 126 - "customer_pool.py" -Cohesion: 0.52 -Nodes (6): apply_updates(), collect_candidates(), main(), parse_name(), Path, write_csv() +Cohesion: 0.36 +Nodes (8): operlog_detail(), operlog_list(), Session, 操作日志分页列表(基于 API 请求日志适配 RuoYi OperLog 结构), _user_info(), OperLogDetailBody, OperLogListBody, 操作日志(兼容 RuoYi OperLog 视图) ### Community 127 - "Community 127" -Cohesion: 0.25 -Nodes (17): _cargo_stats(), get_dashboard_stats(), get_inbound_by_cargo(), get_inbound_by_partner_cargo(), get_outbound_by_cargo(), get_outbound_by_partner_cargo(), _partner_cargo_stats(), Session (+9 more) +Cohesion: 0.21 +Nodes (19): _cargo_stats(), get_dashboard_stats(), get_inbound_by_cargo(), get_inbound_by_partner_cargo(), get_outbound_by_cargo(), get_outbound_by_partner_cargo(), _partner_cargo_stats(), Session (+11 more) ### Community 128 - "plan.py" Cohesion: 0.06 -Nodes (73): archive_plan(), _build_driver_url(), cancel_plan(), cancel_plan_wait_notice(), count_plans_by_contract(), create_from_contract(), create_plan(), create_plan_full() (+65 more) +Nodes (116): archive_plan(), cancel_plan_wait_notice(), count_plans_by_contract(), create_from_contract(), create_plan(), create_plan_full(), delete_plan(), _determine_plan_type() (+108 more) ### Community 129 - "BaseStorage" -Cohesion: 0.31 -Nodes (15): DbInboundOutbound, PlTransportDbLink, 运输-地磅出入库关联 pl_transport_db_link, _apply_plan_quantity_delta(), 再次勾选地磅安排前:软删本运输单此前生成的、仍可作废的出入库单及关联。 - 不删除地磅月计划(可能被其他业务复用) - 若出入库单已完成的/已, _resolve_link_contributed_qty(), revoke_regeneratable_dibang_for_transport(), _subtract_plan_contribution() (+7 more) +Cohesion: 0.24 +Nodes (10): ProcessDefCreateBody, ProcessDefUpdateBody, StartInstanceBody, create_task(), get_latest_version(), get_pending_tasks_by_node(), get_task(), 流程定义版本 wf_process_version (+2 more) ### Community 130 - "datetime_parse.py" -Cohesion: 0.36 -Nodes (15): create_opportunity_follow(), _ensure_parent_opportunity(), get_opportunity_follow(), list_follows_by_opportunity(), list_opportunity_follows(), _parse_optional_datetime(), Any, datetime (+7 more) +Cohesion: 0.37 +Nodes (14): create_opportunity_follow(), _ensure_parent_opportunity(), list_follows_by_opportunity(), list_opportunity_follows(), _parse_optional_datetime(), Any, datetime, Session (+6 more) ### Community 131 - "LocalStorage" -Cohesion: 0.18 -Nodes (23): paste_recognize_commit(), VehiclePersonnelRow, ConflictAction, PasteCommitBody, PasteCommitResult, PastePersonnelIn, PasteVehicleIn, 运输计划 - 三方粘贴识别提交 Schema (+15 more) +Cohesion: 0.36 +Nodes (7): list_ethnics(), Any, Session, 民族码表 CRUD(全局 sys_ethnic), _row_to_dict(), 民族码表 sys_ethnic(国标 GB/T 3304,全局), SysEthnic ### Community 132 - "crm_supplier_hazard.py" -Cohesion: 0.29 -Nodes (12): build_updates(), derive_source_url(), fetch_source_customers(), legacy_id_to_str(), load_oss_map(), load_runtime_settings(), load_settings_env(), main() (+4 more) +Cohesion: 0.14 +Nodes (23): build_updates(), derive_source_url(), fetch_source_customers(), legacy_id_to_str(), load_oss_map(), load_runtime_settings(), load_settings_env(), main() (+15 more) ### Community 134 - "Community 134" -Cohesion: 0.25 -Nodes (18): batch_generate_sample_codes(), batch_issue_sample_codes(), batch_revoke_sample_codes(), create_sample_code(), get_sample_code(), list_sample_codes(), _parse_issued_time(), Any (+10 more) +Cohesion: 0.15 +Nodes (26): allocate_next_biz_no(), _format_biz_no(), _prefix_for(), datetime, Session, 业务协议号自动生成:XBCC / JZCC + YYYYMMDD + 6 位序号, 原子分配下一个业务协议号。 须在 create 事务内调用;使用 MySQL LAST_INSERT_ID 保证并发安全。, batch_generate_sample_codes() (+18 more) ### Community 135 - "post.py" -Cohesion: 0.24 -Nodes (12): get_last_month_range(), month_range(), date, Session, 地磅计划按月自动生成 — 迁移自 simple-dibang-xiaoshou/auto-create-plan/auto_create_monthly_pla, 按月自动生成采购计划。 - 默认仅在每月 1 日执行(force=True 时跳过该限制,供手动触发验收) - 遍历所有租户,按上月计划模板生, run_auto_generate_monthly_plans(), default_execution_status() (+4 more) +Cohesion: 0.30 +Nodes (10): get_last_month_range(), month_range(), date, Session, 地磅计划按月自动生成 — 迁移自 simple-dibang-xiaoshou/auto-create-plan/auto_create_monthly_pla, 按月自动生成采购计划。 - 默认仅在每月 1 日执行(force=True 时跳过该限制,供手动触发验收) - 遍历所有租户,按上月计划模板生, run_auto_generate_monthly_plans(), default_execution_status() (+2 more) ### Community 136 - "Community 136" Cohesion: 0.19 @@ -637,52 +640,48 @@ Cohesion: 0.15 Nodes (9): 微信消息通知服务 支持微信小程序模板消息推送 使用方式: from app.core.wechat_message import WechatMes, 发送订单状态通知 Args: openid: 用户openid order_n, 发送支付成功通知 Args: openid: 用户openid order_n, 发送配送通知 Args: openid: 配送员openid task_no:, 发送配送时效预警 Args: openid: 配送员openid task_n, 发送退款结果通知 Args: openid: 用户openid order_n, 发送催单通知给配送员 Args: deliver_openid: 配送员openid, 发送模板消息 Args: openid: 用户openid template_ (+1 more) ### Community 141 - "clue_statistics.py" -Cohesion: 0.58 -Nodes (9): _apply_create_range(), _base_query(), get_clue_level_statistics(), get_clue_overview_statistics(), get_clue_owner_statistics(), get_clue_source_statistics(), get_clue_trend_statistics(), Any (+1 more) +Cohesion: 0.49 +Nodes (10): clue_statistics_level(), _apply_create_range(), _base_query(), get_clue_level_statistics(), get_clue_overview_statistics(), get_clue_owner_statistics(), get_clue_source_statistics(), get_clue_trend_statistics() (+2 more) ### Community 143 - "SysEthnic" Cohesion: 0.33 Nodes (11): create_leave(), get_leave(), list_leaves(), Any, Session, _row_to_dict(), soft_delete_leave(), update_leave() (+3 more) ### Community 144 - "SysApiRequestLog" -Cohesion: 0.17 -Nodes (11): price_letter_add(), price_letter_detail(), price_letter_list(), price_letter_update(), price_letter_void(), PriceLetterCreateBody, PriceLetterDetailBody, PriceLetterListBody (+3 more) +Cohesion: 0.33 +Nodes (7): clue_import_template(), customer_import_template(), product_import_template(), export_rows_to_xlsx_response(), CRM 列表导出统一入口:表头 + 行数据 + 字典 label 转换 + 文件流响应。, workbook_to_streaming_response(), StreamingResponse ### Community 145 - "minio_url.py" -Cohesion: 0.24 -Nodes (13): normalize_attachment_csv(), normalize_attachment_csv(), extract_minio_object_key(), join_relative_urls(), normalize_oss_storage_url(), MinIO 附件 URL 规范化(数据迁移共用)。 背景 ---- CRM / 地磅 / 报销与 shanxia2.0 共用同一 MinIO(bucket 默, 业务表 OSS ID 串 → 相对 URL 串(用于客户证照、跟进附件等)。, 去掉预签名 query(``?X-Amz-...``)。 (+5 more) +Cohesion: 0.38 +Nodes (7): change_current_user_password(), get_current_user_profile(), public_quote_share(), Request, Session, 获取当前用户信息(与 sys_user 字段对应)。, 公开分享查看报价单 — Java: GET /share/{shareCode}(无 JWT) ### Community 146 - "__init__.py" -Cohesion: 0.29 -Nodes (15): create_price_letter(), get_price_letter(), list_price_letters(), _parse_date(), Any, date, Session, _row_to_dict() (+7 more) +Cohesion: 0.13 +Nodes (26): price_letter_add(), price_letter_detail(), price_letter_list(), price_letter_update(), price_letter_void(), create_price_letter(), get_price_letter(), list_price_letters() (+18 more) ### Community 147 - "Community 147" Cohesion: 0.37 Nodes (17): check_env(), check_python(), create_venv(), init_env(), install_dependencies(), log_error(), log_info(), log_success() (+9 more) ### Community 150 - "ContractListQuery" -Cohesion: 0.10 -Nodes (32): CRM 合同 API 路由 — GET/PUT/DELETE/POST 对齐原 Java CRM, 接口菜单权限守卫。super_admin 直接放行。, require_menu_code(), ContractApproverSettingSaveBody, ContractApprovalActionBody, ContractBatchAssignBody, ContractBatchSubmitBody, ContractChangeCreateBody (+24 more) +Cohesion: 0.08 +Nodes (28): ContractApprovalActionBody, ContractApprovalPassBody, ContractApprovalRejectBody, ContractApprovalTransferBody, ContractBatchAssignBody, ContractBatchSubmitBody, ContractChangeCreateBody, ContractChangeSubmitBody (+20 more) ### Community 152 - "Community 152" -Cohesion: 0.12 -Nodes (16): 供方全量列表(下拉)— Java: CrmSupplierInfoController.listAll, 供方详情 — Java: CrmSupplierInfoController.getInfo, 新增供方 — Java: CrmSupplierInfoController.add, 修改供方 — Java: CrmSupplierInfoController.edit, 删除供方 — Java: CrmSupplierInfoController.remove, supplier_info_add(), supplier_info_delete(), supplier_info_detail() (+8 more) +Cohesion: 0.29 +Nodes (6): Config, format_api_error_message(), PageResult, Exception, 将 HTTP/SQLAlchemy 等异常转为可展示的错误文案(避免 str([]) 空列表)。, ResponseModel ### Community 154 - "web_login_rsa_public_key" -Cohesion: 0.10 -Nodes (27): get_current_time(), parse_datetime(), datetime, get_pool_record(), list_pool_records(), Any, Session, _row_to_dict() (+19 more) +Cohesion: 0.23 +Nodes (10): check_customer_protect_time(), pool_recovery_job(), Session, 每天凌晨1点:检查保护期到期客户,跟进次数不足则退回公海, 每天早上9点:保护期到期提醒(3天内到期且跟进不足), _recycle_to_pool(), remind_customer_recycle(), warn_customer_recycle() (+2 more) ### Community 156 - "get_client_ip" Cohesion: 0.27 Nodes (11): create_dict_data(), get_dict_data(), list_dict_data(), list_dict_data_options(), Any, Session, 字典数据 CRUD(sys_dict_data), 字典下拉选项:租户主数据,忽略数据范围(user_info 保留兼容调用方,不参与过滤)。 (+3 more) -### Community 159 - "context.py" -Cohesion: 0.48 -Nodes (7): _opp_list_kwargs(), opportunity_export(), opportunity_kanban(), opportunity_list(), opportunity_mine_list(), OpportunityKanbanBody, OpportunityListBody - ### Community 160 - "register_local_callback" -Cohesion: 0.60 -Nodes (5): product_allowed(), test_dual_requires_both(), test_explosive_only_requires_allow_explosive(), test_plain_always_allowed(), test_toxic_only_requires_allow_toxic() +Cohesion: 0.40 +Nodes (3): API 路由包 — 山峡化工生产一体化门户, get_menu_list(), 运营端菜单接口(与 web-admin 前端静态路由 sqxp.ts 对齐,14 个一级菜单) ### Community 161 - "backfill_crm_contract_attachment_urls.py" Cohesion: 0.33 @@ -696,13 +695,21 @@ Nodes (3): BaseStorage, 带下载文件名的访问 URL;默认实现为普通 Cohesion: 0.31 Nodes (9): decrypt_login_payload(), ensure_initialized(), extract_login_credentials(), get_public_pem(), Any, 登录凭据 RSA 解密(与前端 JSEncrypt PKCS#1 v1.5 兼容)。, Base64 密文 -> JSON 对象(须含 username、password、ts 毫秒时间戳)。, 从请求体解析用户名、密码。 返回 (username, password, error_message);error_message 非空时表示失败。 (+1 more) +### Community 164 - "get_current_user_by_token" +Cohesion: 0.50 +Nodes (5): get_current_user(), get_current_user_by_token(), Session, 根据 token 获取当前用户(包含 Redis 会话校验;会话滑动续期), 获取当前用户(sync 依赖,配合 sync 路由在线程池执行,避免阻塞事件循环)。 + ### Community 170 - "test_quote_approver_setting.py" Cohesion: 0.20 Nodes (21): _assert_users_exist(), get_setting(), Any, Session, _row_to_dict(), save_setting(), _assert_users_exist(), get_setting() (+13 more) ### Community 172 - "MinIOStorage" -Cohesion: 0.32 -Nodes (3): MinIOStorage, MinIO 预签名下载 URL,携带原始文件名。, MinIO 预签名内联预览 URL(PDF 等 iframe 场景)。 +Cohesion: 0.24 +Nodes (5): MinIOStorage, Any, 从 MINIO_BASE_URL 解析公网 endpoint;未配置或与内网相同时复用 self.client。, MinIO 预签名下载 URL,携带原始文件名。, MinIO 预签名内联预览 URL(PDF 等 iframe 场景)。 + +### Community 173 - ".to_tenant_user_dict" +Cohesion: 0.40 +Nodes (3): Any, 供 get_tenant_no 等门户工具使用。, 与门户 JWT / apply_data_scope 所需的 user_info 字段对齐。 ### Community 174 - "datetime_parse.py" Cohesion: 0.67 @@ -721,8 +728,8 @@ Cohesion: 0.18 Nodes (10): 1. 创建虚拟环境, 2. 安装依赖, 3. 配置环境变量, 4. 启动服务, API 路由分组, shanxia2.0 后端骨架(FastAPI), 开发规范, 快速开始 (+2 more) ### Community 220 - "api_crypto_middleware.py" -Cohesion: 0.12 -Nodes (24): ApiCryptoMiddleware, _claims_from_auth(), _coerce_post_method_override_to_get(), _get_redis_client(), _is_crypto_api(), _json_error_response(), _mark_nonce_once(), _nonce_key() (+16 more) +Cohesion: 0.15 +Nodes (21): _claims_from_auth(), _coerce_post_method_override_to_get(), _get_redis_client(), _is_crypto_api(), _json_error_response(), _mark_nonce_once(), _nonce_key(), Redis (+13 more) ### Community 237 - "order_status_compat.py" Cohesion: 0.36 @@ -739,22 +746,22 @@ Nodes (6): eq_unicode(), like_unicode(), MySQL 字符串比较/模糊匹配时 ## Knowledge Gaps - **30 isolated node(s):** `Config`, `Config`, `Config`, `Config`, `Config` (+25 more) These have ≤1 connection - possible missing edges or undocumented components. -- **16 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **18 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `generate_uuid()` connect `Community 38` to `plan.py`, `datetime_parse.py`, `LocalStorage`, `Community 4`, `Community 134`, `post.py`, `Community 8`, `Community 136`, `Community 6`, `Community 11`, `Community 7`, `Community 13`, `Community 14`, `SysEthnic`, `Community 15`, `Community 16`, `__init__.py`, `Community 19`, `Community 18`, `Community 21`, `Community 25`, `Community 26`, `web_login_rsa_public_key`, `Community 27`, `get_client_ip`, `Community 30`, `Community 28`, `Community 29`, `Community 34`, `Community 39`, `test_quote_approver_setting.py`, `Community 43`, `Community 51`, `menu.py`, `Community 53`, `Community 61`, `Community 65`, `Community 66`, `Community 67`, `Community 68`, `Community 70`, `Community 74`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `response.py`, `Community 95`, `_ensure_subpack_slip_no`, `dept.py`, `Community 109`, `storage.py`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 125`, `customer_pool.py`?** - _High betweenness centrality (0.121) - this node is a cross-community bridge._ -- **Why does `Settings` connect `price_letter_detail` to `backfill_crm_contract_attachment_urls.py`, `Community 35`, `crm_supplier_hazard.py`, `Community 5`, `Community 7`, `Community 72`, `Community 73`, `Community 42`, `Community 78`, `Community 52`, `Any`, `Community 59`, `api_crypto_middleware.py`, `Community 62`?** - _High betweenness centrality (0.111) - this node is a cross-community bridge._ -- **Why does `BaseModel` connect `Community 12` to `plan.py`, `Community 1`, `Community 3`, `LocalStorage`, `Community 6`, `Community 11`, `Community 14`, `Community 15`, `SysApiRequestLog`, `Community 16`, `Community 18`, `ContractListQuery`, `Community 152`, `Community 25`, `Community 27`, `Community 30`, `context.py`, `Community 33`, `Community 36`, `Community 43`, `Community 48`, `Community 49`, `Community 50`, `Community 54`, `Community 58`, `Community 60`, `Community 63`, `Community 64`, `Community 65`, `Community 66`, `Community 71`, `Community 83`, `Community 86`, `_ensure_subpack_slip_no`, `list_customers`, `Community 106`, `apply_pl_scope`, `Community 109`, `Community 111`, `Community 119`, `Community 127`?** - _High betweenness centrality (0.093) - this node is a cross-community bridge._ +- **Why does `generate_uuid()` connect `Community 51` to `plan.py`, `BaseStorage`, `datetime_parse.py`, `Community 0`, `Community 4`, `Community 134`, `post.py`, `Community 8`, `Community 136`, `Community 7`, `Community 11`, `Community 13`, `Community 14`, `SysEthnic`, `Community 15`, `Community 16`, `__init__.py`, `Community 19`, `Community 21`, `Community 25`, `web_login_rsa_public_key`, `Community 27`, `get_client_ip`, `Community 28`, `Community 30`, `Community 34`, `Community 38`, `Community 39`, `test_quote_approver_setting.py`, `Community 43`, `Community 49`, `menu.py`, `Community 53`, `Community 61`, `Community 65`, `Community 66`, `Community 67`, `Community 68`, `Community 70`, `Community 74`, `Community 81`, `Community 83`, `Community 86`, `Community 87`, `pl_ocr_service.py`, `pl_vehicle_recharge_service.py`, `Community 92`, `_invoice_info_by_customer_impl`, `response.py`, `Community 95`, `_ensure_subpack_slip_no`, `dept.py`, `Community 106`, `Community 109`, `storage.py`, `quote_share_log.py`, `db_models.py`, `site.py`, `Community 116`, `Community 118`, `Community 125`?** + _High betweenness centrality (0.151) - this node is a cross-community bridge._ +- **Why does `Settings` connect `price_letter_detail` to `backfill_crm_contract_attachment_urls.py`, `Community 35`, `crm_supplier_hazard.py`, `Community 5`, `Community 7`, `Community 72`, `Community 73`, `Community 42`, `Community 78`, `Community 52`, `Any`, `Community 59`, `Community 62`, `Community 95`?** + _High betweenness centrality (0.110) - this node is a cross-community bridge._ +- **Why does `BaseModel` connect `Community 71` to `plan.py`, `BaseStorage`, `Community 1`, `Community 6`, `Community 11`, `Community 12`, `Community 14`, `Community 15`, `Community 16`, `Community 18`, `__init__.py`, `ContractListQuery`, `Community 152`, `Community 25`, `Community 26`, `Community 27`, `Community 30`, `Community 33`, `Community 34`, `Community 36`, `Community 48`, `Community 49`, `SoftDeleteModel`, `Community 50`, `Community 54`, `Community 60`, `Community 64`, `Community 65`, `Community 66`, `Community 83`, `Community 86`, `response.py`, `_ensure_subpack_slip_no`, `apply_pl_scope`, `Community 109`, `Community 111`, `storage.py`, `Community 119`, `customer_pool.py`, `Community 127`?** + _High betweenness centrality (0.106) - this node is a cross-community bridge._ - **Are the 8 inferred relationships involving `DbUserContext` (e.g. with `InventoryRelatedData` and `AutoGenerateMonthlyResult`) actually correct?** _`DbUserContext` has 8 INFERRED edges - model-reasoned connections that need verification._ - **What connects `API 路由包 — 山峡化工生产一体化门户`, `返回运营端角色下拉选项(label=库中角色名,value=Web 角色码)。`, `返回用户下拉选项(label=昵称,value=用户ID,附带 nickName/userNo)。 供申请人/审批人等选择场景使用,返回本租户全部有效` to the rest of the system?** - _493 weakly-connected nodes found - possible documentation gaps or missing edges._ -- **Should `Community 1` be split into smaller, more focused modules?** - _Cohesion score 0.1251778093883357 - nodes in this community are weakly interconnected._ + _494 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Community 0` be split into smaller, more focused modules?** + _Cohesion score 0.14304993252361672 - nodes in this community are weakly interconnected._ - **Should `Community 3` be split into smaller, more focused modules?** - _Cohesion score 0.07668413900213551 - nodes in this community are weakly interconnected._ \ No newline at end of file + _Cohesion score 0.06672519754170325 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/v0.9.4/030260b446ad51a39654ee9bc869cc8904e07390d47447b0ce238888ba15316e.json b/backend/graphify-out/cache/ast/v0.9.4/030260b446ad51a39654ee9bc869cc8904e07390d47447b0ce238888ba15316e.json new file mode 100644 index 000000000..bb9c536a7 --- /dev/null +++ b/backend/graphify-out/cache/ast/v0.9.4/030260b446ad51a39654ee9bc869cc8904e07390d47447b0ce238888ba15316e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "label": "crm_quote_routes.py", "file_type": "code", "source_file": "app/api/crm_quote_routes.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "label": "register_quote_routes()", "file_type": "code", "source_file": "app/api/crm_quote_routes.py", "source_location": "L85"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_rationale_1", "label": "CRM \u62a5\u4ef7\u5355 API \u8def\u7531 \u2014 \u6302\u63a5\u5230 crm.router", "file_type": "rationale", "source_file": "app/api/crm_quote_routes.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_core_database", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_core_menu_guard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_core_response", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_core_tenant_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_crud_crm_data_scope_helpers", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_crud_crm_quote", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_crud_crm_quote_approver_setting", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L36", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_crud_crm_quote_approval", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_crud_crm_quote_product", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L43", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_crud_crm_quote_share_log", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L49", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_schemas_crm_quote_approver_setting", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L50", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_schemas_crm_quote", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L51", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_utils_crm_export_columns", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L81", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L82", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L85", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_rationale_1", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/api/crm_quote_routes.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L86", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L122", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L138", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L162", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L190", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L206", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L229", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L245", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L261", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L277", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L300", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L316", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L339", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L369", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L396", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L412", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L428", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L460", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L484", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L498", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L522", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L538", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L564", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L592", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L608", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L624", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L648", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L670", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L685", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L701", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L717", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py", "source_location": "L730", "receiver": "router"}], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_quote_routes_register_quote_routes"]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/v0.9.4/8dc61a9acfd6c688d60733291382cfee9712f600b370c4f6e7a5fc4c70e12f37.json b/backend/graphify-out/cache/ast/v0.9.4/8dc61a9acfd6c688d60733291382cfee9712f600b370c4f6e7a5fc4c70e12f37.json new file mode 100644 index 000000000..9260277c4 --- /dev/null +++ b/backend/graphify-out/cache/ast/v0.9.4/8dc61a9acfd6c688d60733291382cfee9712f600b370c4f6e7a5fc4c70e12f37.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "label": "crm_contract_routes.py", "file_type": "code", "source_file": "app/api/crm_contract_routes.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "label": "register_contract_routes()", "file_type": "code", "source_file": "app/api/crm_contract_routes.py", "source_location": "L78"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_rationale_1", "label": "CRM \u5408\u540c API \u8def\u7531 \u2014 GET/PUT/DELETE/POST \u5bf9\u9f50\u539f Java CRM", "file_type": "rationale", "source_file": "app/api/crm_contract_routes.py", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "sqlalchemy_orm", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_core_database", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_core_menu_guard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_core_oper_log_decorator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_core_response", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_core_tenant_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_crud_crm_data_scope_helpers", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_crud_crm_contract", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_crud_crm_contract_approval", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L47", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_crud_crm_contract_approver_setting", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L51", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_crud_crm_contract_approver_setting", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L52", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_schemas_crm_contract_approver_setting", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L53", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_schemas_crm_contract", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L54", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_utils_crm_export_columns", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L74", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "app_utils_excel_export", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L75", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L78", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_rationale_1", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/api/crm_contract_routes.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L79", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L162", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "oper_log", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L163", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L187", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "oper_log", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L188", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "delete", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L216", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "oper_log", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L217", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L234", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L261", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L288", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L312", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L329", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L346", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "oper_log", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L347", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L372", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L395", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L411", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L427", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L451", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "oper_log", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L452", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L482", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L512", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L526", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L540", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L566", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L582", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L608", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L634", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L660", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "put", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L686", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L711", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L727", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L752", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L768", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "post", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L780", "receiver": "router"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes", "callee": "get", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py", "source_location": "L804", "receiver": "router"}], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_api_crm_contract_routes_register_contract_routes"]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/v0.9.4/9d8b58b75789fcdb58745877c28b5d961f68f134496e63057f8f54c51641bb63.json b/backend/graphify-out/cache/ast/v0.9.4/9d8b58b75789fcdb58745877c28b5d961f68f134496e63057f8f54c51641bb63.json new file mode 100644 index 000000000..ed371e29d --- /dev/null +++ b/backend/graphify-out/cache/ast/v0.9.4/9d8b58b75789fcdb58745877c28b5d961f68f134496e63057f8f54c51641bb63.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "label": "storage.py", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "label": "normalize_storage_path()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L12"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file", "label": "upload_bx_file()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L32"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "label": "get_access_url()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L45"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "label": "get_preview_url()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L54"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "label": "get_download_url()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L66"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "label": "download_file_bytes()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L73"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_file_stream", "label": "file_stream()", "file_type": "code", "source_file": "app/services/bx/storage.py", "source_location": "L99"}, {"id": "bytesio", "label": "BytesIO", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_1", "label": "\u62a5\u9500\u9644\u4ef6\u5b58\u50a8\u9002\u914d \u2014 \u590d\u7528\u95e8\u6237 app.core.storage\uff0c\u5bf9\u5916\u4fdd\u6301 bx \u534f\u8bae\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_13", "label": "\u5c06 upload \u8fd4\u56de\u7684\u5b8c\u6574 URL \u5f52\u4e00\u5316\u4e3a\u5b58\u50a8\u76f8\u5bf9\u8def\u5f84\uff08\u4e0e admin \u9644\u4ef6 upload \u4e00\u81f4\uff09\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L13"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_33", "label": "\u4e0a\u4f20\u6587\u4ef6\u5230\u5bf9\u8c61\u5b58\u50a8\u3002 \u8fd4\u56de (relative_path, access_url)\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L33"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_46", "label": "\u83b7\u53d6\u53ef\u8bbf\u95ee URL\uff08\u672c\u5730/MinIO \u516c\u5f00\u5730\u5740\uff09\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L46"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_55", "label": "\u56fe\u7247/\u9644\u4ef6\u9884\u89c8 URL\uff1aMinIO \u9884\u7b7e\u540d inline\uff0c\u672c\u5730/\u5176\u4ed6\u5b58\u50a8\u7528 get_url\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L55"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_67", "label": "\u5e26\u6587\u4ef6\u540d\u7684\u4e0b\u8f7d URL\uff08\u5bf9\u9f50\u95e8\u6237 attachment/download-url\uff09\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L67"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_74", "label": "\u8bfb\u53d6\u6587\u4ef6\u4e8c\u8fdb\u5236\uff0c\u4f9b StreamingResponse \u4e0b\u8f7d\u3002", "file_type": "rationale", "source_file": "app/services/bx/storage.py", "source_location": "L74"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "app_core_storage", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L45", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L54", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L66", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L73", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_file_stream", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L99", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_file_stream", "target": "bytesio", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L99", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L41", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L48", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L57", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L69", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L76", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_file_stream", "target": "bytesio", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L100", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_file_stream", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L100", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_1", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_13", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_33", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L33", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_46", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L46", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_55", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L55", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_67", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L67", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_rationale_74", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/services/bx/storage.py", "source_location": "L74", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L14", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "split", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L18", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L19", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L20", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L22", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L23", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L25", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L25", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "get_storage", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L26", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "MinIOStorage", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L27"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "_extract_object_key", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L28", "receiver": "store"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L29", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L39", "receiver": "biz_type"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file", "callee": "upload_file", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L40", "receiver": "storage"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "callee": "get_storage", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L47", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "callee": "get_url", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L51", "receiver": "store"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "callee": "get_storage", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L56", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "callee": "MinIOStorage", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L60"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "callee": "presigned_preview_url", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L62", "receiver": "store"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "callee": "get_url", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L63", "receiver": "store"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "callee": "get_storage", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L68", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "callee": "presigned_download_url", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L70", "receiver": "store"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "get_storage", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L75", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L78", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "MinIOStorage", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L79"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "get_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L80", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "read", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L82", "receiver": "response"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "close", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L84", "receiver": "response"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "release_conn", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L85", "receiver": "response"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "LocalStorage", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L86"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "Path", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L87", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "is_file", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L88", "receiver": "file_full_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "FileNotFoundError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L89", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L90", "receiver": "file_full_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "get_url", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L94", "receiver": "store"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "urlopen", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L95", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "callee": "read", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py", "source_location": "L96", "receiver": "resp"}], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_download_file_bytes", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_file_stream", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_access_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_download_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_get_preview_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_normalize_storage_path", "users_wuzilong_work_00code_shanxia2_0_backend_app_services_bx_storage_upload_bx_file"]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/v0.9.4/bcca3bde37f41523158b4f083c56cf4c37e03d218bb9f1ce51e2a55d7fce1807.json b/backend/graphify-out/cache/ast/v0.9.4/bcca3bde37f41523158b4f083c56cf4c37e03d218bb9f1ce51e2a55d7fce1807.json new file mode 100644 index 000000000..cb6f0d535 --- /dev/null +++ b/backend/graphify-out/cache/ast/v0.9.4/bcca3bde37f41523158b4f083c56cf4c37e03d218bb9f1ce51e2a55d7fce1807.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "label": "config.py", "file_type": "code", "source_file": "app/core/config.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_settings", "label": "Settings", "file_type": "code", "source_file": "app/core/config.py", "source_location": "L7"}, {"id": "basesettings", "label": "BaseSettings", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_config", "label": "Config", "file_type": "code", "source_file": "app/core/config.py", "source_location": "L183"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "target": "pydantic_settings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_settings", "target": "basesettings", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/config.py", "source_location": "L183", "weight": 1.0}], "raw_calls": [], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_config", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_config_settings"]} \ No newline at end of file diff --git a/backend/graphify-out/cache/ast/v0.9.4/f3dde2ec4a7cabd674c24ca7e6735ebbdf48b071c014737e1da1aa38902559ac.json b/backend/graphify-out/cache/ast/v0.9.4/f3dde2ec4a7cabd674c24ca7e6735ebbdf48b071c014737e1da1aa38902559ac.json new file mode 100644 index 000000000..db27722e4 --- /dev/null +++ b/backend/graphify-out/cache/ast/v0.9.4/f3dde2ec4a7cabd674c24ca7e6735ebbdf48b071c014737e1da1aa38902559ac.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "label": "storage.py", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "label": "convert_heic_to_jpeg()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L37"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "label": "process_image_content()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L52"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "label": "BaseStorage", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L61"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L64"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L68"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L72"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L76"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_download_url", "label": ".presigned_download_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L80"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_preview_url", "label": ".presigned_preview_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L86"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "label": "LocalStorage", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L91"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L94"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "label": "._ensure_dir()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L98"}, {"id": "path", "label": "Path", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L104"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L110"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L125"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L134"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L151"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "label": "QiniuStorage", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L156"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L159"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L168"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L174"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L189"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L197"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L208"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "label": "OSSStorage", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L213"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L216"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L226"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L232"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L243"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L251"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L260"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "label": "MinIOStorage", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L265"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L268"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "label": "._build_presign_client()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L288"}, {"id": "any", "label": "Any", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "label": "._generate_filename()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L308"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "label": ".upload_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L314"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_base64", "label": ".upload_base64()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L331"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_delete_file", "label": ".delete_file()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L339"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "label": ".get_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L348"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "label": "._extract_object_key()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L352"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "label": ".presigned_download_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L368"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "label": ".presigned_preview_url()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L386"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "label": "get_storage()", "file_type": "code", "source_file": "app/core/storage.py", "source_location": "L402"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_1", "label": "\u6587\u4ef6\u5b58\u50a8\u5de5\u5177\u6a21\u5757 \u652f\u6301\u591a\u79cd\u5b58\u50a8\u65b9\u5f0f\uff1a 1. \u672c\u5730\u5b58\u50a8 (local) - \u9ed8\u8ba4 2. \u4e03\u725b\u4e91\u5b58\u50a8 (qiniu) - \u63a8\u8350\u751f\u4ea7\u73af\u5883\u4f7f\u7528 3. \u963f\u91cc\u4e91OSS (", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L1"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_38", "label": "\u5c06 HEIC/HEIF \u683c\u5f0f\u8f6c\u6362\u4e3a JPEG \u683c\u5f0f", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L38"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_53", "label": "\u5904\u7406\u56fe\u7247\u5185\u5bb9\uff0c\u5982\u679c\u662f HEIC \u683c\u5f0f\u5219\u8f6c\u6362\u4e3a JPEG", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L53"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_83", "label": "\u5e26\u4e0b\u8f7d\u6587\u4ef6\u540d\u7684\u8bbf\u95ee URL\uff1b\u9ed8\u8ba4\u5b9e\u73b0\u4e3a\u666e\u901a\u8bbf\u95ee\u5730\u5740\u3002", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L83"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_87", "label": "\u6d4f\u89c8\u5668\u5185\u8054\u9884\u89c8 URL\uff1b\u9ed8\u8ba4\u5b9e\u73b0\u4e3a\u666e\u901a\u8bbf\u95ee\u5730\u5740\u3002", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L87"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_289", "label": "\u4ece MINIO_BASE_URL \u89e3\u6790\u516c\u7f51 endpoint\uff1b\u672a\u914d\u7f6e\u6216\u4e0e\u5185\u7f51\u76f8\u540c\u65f6\u590d\u7528 self.client\u3002", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L289"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_371", "label": "MinIO \u9884\u7b7e\u540d\u4e0b\u8f7d URL\uff0c\u643a\u5e26\u539f\u59cb\u6587\u4ef6\u540d\u3002", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L371"}, {"id": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_387", "label": "MinIO \u9884\u7b7e\u540d\u5185\u8054\u9884\u89c8 URL\uff08PDF \u7b49 iframe \u573a\u666f\uff09\u3002", "file_type": "rationale", "source_file": "app/core/storage.py", "source_location": "L387"}], "edges": [{"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L21", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L22", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "base64", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L23", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L24", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L25", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "urllib_parse", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L26", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L27", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L52", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L64", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L68", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L72", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L76", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_download_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L80", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_preview_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L86", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L91", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L91", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L94", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L98", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "target": "path", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L98", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L104", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L110", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L125", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L134", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L151", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L156", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L156", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L159", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L168", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L174", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L189", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L197", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L208", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L213", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L213", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L216", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L226", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L232", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L243", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L251", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L260", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L265", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L265", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L268", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L288", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "target": "any", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L288", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "target": "any", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L288", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L308", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L314", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_base64", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L331", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_delete_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L339", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L348", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L352", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L368", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L386", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L402", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L402", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L57", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_download_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L84", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_preview_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L88", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L100", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L113", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L115", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L116", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L123", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_base64", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L132", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "target": "path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L143", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L179", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L181", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L186", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_base64", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L195", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L235", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L237", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L240", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_base64", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L249", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L284", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L317", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L319", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L329", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_base64", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L337", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L372", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L388", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L407", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L409", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L411", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L413", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_1", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_38", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L38", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_53", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L53", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_83", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_download_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L83", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_87", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_preview_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L87", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_289", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L289", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_371", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L371", "weight": 1.0}, {"source": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_rationale_387", "target": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/storage.py", "source_location": "L387", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "callee": "BytesIO", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L43", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "callee": "to_pillow", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L44", "receiver": "heif_file"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "callee": "BytesIO", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L45", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "callee": "save", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L46", "receiver": "image"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L47", "receiver": "output"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "callee": "Exception", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L49", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "callee": "what", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L55", "receiver": "imghdr"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L57", "receiver": "filename"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L95", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "callee": "strftime", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L100", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L100", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L101", "receiver": "path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L106", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L107", "receiver": "uuid"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "callee": "write", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L120", "receiver": "f"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "callee": "strftime", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L122", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L122", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "callee": "strftime", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L122", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L122", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L129", "receiver": "base64_data"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L131", "receiver": "base64"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L138", "receiver": "file_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L139", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L139", "receiver": "file_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L141", "receiver": "file_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L144", "receiver": "file_full_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "callee": "unlink", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L145", "receiver": "file_full_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_init", "callee": "Auth", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L162", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L164", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_init", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L166", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L170", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "callee": "strftime", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L171", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L171", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L171", "receiver": "uuid"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "callee": "upload_token", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L182", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "callee": "put_data", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L184", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file", "callee": "Exception", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L187", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L192", "receiver": "base64_data"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L194", "receiver": "base64"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L202", "receiver": "file_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_delete_file", "callee": "delete", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L203", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "callee": "Auth", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L219", "receiver": "oss2"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "callee": "Bucket", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L221", "receiver": "oss2"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L222", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L224", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L228", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "callee": "strftime", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L229", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L229", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L229", "receiver": "uuid"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "callee": "put_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L238", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "callee": "Exception", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L241", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L246", "receiver": "base64_data"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L248", "receiver": "base64"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L254", "receiver": "file_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_delete_file", "callee": "delete_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L255", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "callee": "Minio", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L271", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L279", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "callee": "Minio", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L284"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L286", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L290", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "callee": "urlparse", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L293", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "callee": "lower", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L298", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "callee": "minio_cls", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L301", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "callee": "splitext", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L310", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "callee": "strftime", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L311", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "callee": "now", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L311", "receiver": "datetime"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L311", "receiver": "uuid"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L321", "receiver": "folder"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "callee": "BytesIO", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L322", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "callee": "put_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L323", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_base64", "callee": "split", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L334", "receiver": "base64_data"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_base64", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L336", "receiver": "base64"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_delete_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L342", "receiver": "file_path"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_delete_file", "callee": "remove_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L343", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L353", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "split", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L357", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L359", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L361", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "startswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L361", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "find", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L363", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L366", "receiver": "u"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L374", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "strip", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L375", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L375", "receiver": "key"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "decode", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L376", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "encode", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L376", "receiver": "name"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "quote", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L377", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "presigned_get_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L379", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L382", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L390", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "callee": "endswith", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L392", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "callee": "lower", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L392", "receiver": "key"}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "callee": "presigned_get_object", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L394", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L397", "receiver": null}, {"caller_nid": "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "callee": "lower", "is_member_call": true, "source_file": "/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py", "source_location": "L404", "receiver": null}], "callable_nids": ["users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_delete_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_get_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_download_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_presigned_preview_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_upload_base64", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_basestorage_upload_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_convert_heic_to_jpeg", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_get_storage", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_delete_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_ensure_dir", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_generate_filename", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_get_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_init", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_base64", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_localstorage_upload_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_build_presign_client", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_delete_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_extract_object_key", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_generate_filename", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_get_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_init", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_download_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_presigned_preview_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_base64", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_miniostorage_upload_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_delete_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_generate_filename", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_get_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_init", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_base64", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_ossstorage_upload_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_process_image_content", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_delete_file", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_generate_filename", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_get_url", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_init", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_base64", "users_wuzilong_work_00code_shanxia2_0_backend_app_core_storage_qiniustorage_upload_file"]} \ No newline at end of file diff --git a/backend/graphify-out/cache/stat-index.json b/backend/graphify-out/cache/stat-index.json index 9f6c51da2..069af38c9 100644 --- a/backend/graphify-out/cache/stat-index.json +++ b/backend/graphify-out/cache/stat-index.json @@ -1 +1 @@ -{"/Users/zlwu/work/00code/shanxia2.0/backend/start-prod.sh":{"size":7357,"mtime_ns":1782639355476060453,"hash":"ca89869446be74a2bf2367b3b28f448580220859a39a84ad9613ac5fe35a8433"},"/Users/zlwu/work/00code/shanxia2.0/backend/start.sh":{"size":9548,"mtime_ns":1780114661446983244,"hash":"4d632863e8a0cd81194b491d83a0218a4157435ae812dec76a6f6197b4d48e57"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/__init__.py":{"size":21,"mtime_ns":1780113982281973984,"hash":"60a04ff08fd97084e83ea809fd13feda6d2848be20ebf309e31fc1dad7523230"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/main.py":{"size":6280,"mtime_ns":1782790852770448643,"hash":"8f9da799977bee7134d87a26ff8434ac5ef8eabb0b7368dd537eee49ad7fd00b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/__init__.py":{"size":2207,"mtime_ns":1783208067881286091,"hash":"313e6da0e91d743ce891dd283458c79b50b24c4d909dc96ca7b3fd9d2bfa5013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/auth.py":{"size":7457,"mtime_ns":1782790841500516545,"hash":"34bac56e1c2cb6215f4b5fa2dc32d77d4b4abca51428819eebf4afd269cc51cf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto.py":{"size":1870,"mtime_ns":1780108930724444498,"hash":"c04b748aea86890a5971f749523c7b17dbad1ddd6f9f7f07a5679d159c984e33"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/login_crypto.py":{"size":3858,"mtime_ns":1780108930725155710,"hash":"b82d51afabf2293a9cb1fb2e5f994c383948e7f47ea95fe674686b4f3f3342b1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/config.py":{"size":6958,"mtime_ns":1784032424448146538,"hash":"c2fb44aedb880733de28afa7f92d2c1c681eb600f821bbeba2bcda3933e5bc37"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_pay.py":{"size":23585,"mtime_ns":1780108930725768130,"hash":"3d52265ce65d21e7103f94afa1e8547aee0823b5ea6d65c50317436ac81fb4fc"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py":{"size":11971,"mtime_ns":1782701669198208175,"hash":"0b84c32828939e6102bb3647691fa8f04b1f68e0e0e9f28127374cc44e19a11c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/database.py":{"size":1510,"mtime_ns":1782790847265601586,"hash":"8bc9c8ae62e2be2c6920036582ba448dfcd1711c41cebb62274ff6bc6ee14b0b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/security.py":{"size":728,"mtime_ns":1780108930725470004,"hash":"df0f01115064f7b8de1c81dbe9a6db39360c236610b68c33b3234a51d7f0025b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/request_payload.py":{"size":2842,"mtime_ns":1780108930725350836,"hash":"e9937151530ab1417ef297aef59111977725cf90be2a8fa76c00a0618789aba0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/__init__.py":{"size":61,"mtime_ns":1780108930724312414,"hash":"3dd1842ee59b0c804176b03b4b8a323bd4a252b7feb1bbc32db64f3a8928570e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/response.py":{"size":1824,"mtime_ns":1780108930725412462,"hash":"f1739352d65ea8287d76e282a59553aa8d63c97e35764c64ac378aa5bd9c347e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/menu_guard.py":{"size":1611,"mtime_ns":1780108930725223002,"hash":"3e26077288c3620a4780038b891a326206b45bffe00aca545bdae30172487235"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_collation.py":{"size":548,"mtime_ns":1780108930725025043,"hash":"0c680e25a18244ca839a7de6ed1f4313b33bc8da118d89c463aee1b6af00c6f9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/context.py":{"size":421,"mtime_ns":1780108930724824458,"hash":"83a10aee67162374993c10a30bf8bb8bd9c4b35cf48f42c832415ccebd91660f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/utils.py":{"size":1498,"mtime_ns":1780108930725607296,"hash":"09323693661c1d4560458b86a954128ccff82bbaf6522da0b44f24da99ddf9ea"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py":{"size":14141,"mtime_ns":1782855136810943216,"hash":"3ae2c413c10898a8adb3d6773870bafbfbc18c739c10e0e8b4f765b4b5ca6c08"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/order_status_compat.py":{"size":2828,"mtime_ns":1780108930725284669,"hash":"5349e5a0745ee6734c4a995337779307adefc46f453906171988a77de2081540"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/exceptions.py":{"size":4946,"mtime_ns":1780108930725084335,"hash":"79c997d964bca1a4f12f2b92fb1f181fdb9e2b3cf72eae39f4cc164d23794fd7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/data_scope.py":{"size":8043,"mtime_ns":1782648925694296304,"hash":"626dff86937e5cacec634ecbc61cd53d3763d760223a1d4ec7cd11f64e59a220"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/admin_request_json.py":{"size":2669,"mtime_ns":1780108930724378914,"hash":"4f68b3cf84291e7bddad6ecf4bb4d29ca5e1ec246a9f7f9c4cf5909d0ec1174a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py":{"size":10876,"mtime_ns":1782790001926627098,"hash":"b39f128b6612589ea6ac5babd30752e9585b3af07b82bb1ad53c9e3c0d90816f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_message.py":{"size":11194,"mtime_ns":1780108930725684255,"hash":"5086070deb14d99d1a69e419b2299ec4ea2fe128de80fe321b0c3c531fea7a88"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/models.py":{"size":36012,"mtime_ns":1782699345666495916,"hash":"01f974f182660ec4f215bcacc31eddadd7899d60d95aa19a61046579a994512a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/__init__.py":{"size":2186,"mtime_ns":1784035957226402359,"hash":"5af681963b36af57eaca7fdfc7f707255008ffba18df1a8c2d5903f58fcbf159"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/base.py":{"size":2090,"mtime_ns":1780108930807298966,"hash":"fda71bbe87dcb29c6f0ffa9337e9f39c2c06d912df6cb75d521f0e87c7c73c6d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/auth.py":{"size":1315,"mtime_ns":1780108930808197763,"hash":"018b82e42bbb055250549c54ba700ee01cf28cd753397d6c162f9e60185908e5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/user.py":{"size":1911,"mtime_ns":1780108930810184774,"hash":"3d3c159018cab6ed1cd3de7034ffb1fe77a272b9099901a1882d07aa15fc90a0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/__init__.py":{"size":1159,"mtime_ns":1780112973062398026,"hash":"4e8b0bda6680e2c8740c380b96eedb859ddc584a81bad568a18ba6beb001e480"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/menu.py":{"size":816,"mtime_ns":1780108930808681891,"hash":"17e35f2d7bf95cac00d81357f69fdcbe849e855daa05570c3302de8182b4df11"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/attachment.py":{"size":328,"mtime_ns":1780108930808144846,"hash":"300b74c51c66cb0fbf8c9f4d84a4b7bf29dcc9b6a67d922f8e1d0df05f9fc5bf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/common.py":{"size":555,"mtime_ns":1780108930808426681,"hash":"caa0c03398e54017b25cca2a16cf8d232a59739893a16e4c33b51a5316d8964f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/workflow.py":{"size":3949,"mtime_ns":1780108930810245983,"hash":"e5aed7afcf903c838a35cdaf2230a93d221c63f5c6baa1497e455afac8587a9a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/leave.py":{"size":1449,"mtime_ns":1780108930808614098,"hash":"c54098a69bd4490290dd8d7809ed8764a3f38e8c38692eeef2b505293cdfaeb8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/sample_code.py":{"size":12322,"mtime_ns":1780114002126415047,"hash":"5b74838b3920f9182d092f8a1b721697f1a62e8b90728b9f54101dbb96baa40e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/post.py":{"size":5164,"mtime_ns":1782688288640487823,"hash":"370a7c2b5de64c6b72f98bcf7fbbc166ba2a7f5673c6e1426b10bcc88220bb27"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/user.py":{"size":14214,"mtime_ns":1783851628178366109,"hash":"aeac623e3020fee4cdd01e463ced23e4e03539a17c5b57dcbd9d88aac5a4fb4f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dict_type.py":{"size":5537,"mtime_ns":1782688289303121533,"hash":"f4edc5824466d0096b3b70aeea7b4460a9fa54ca0929421759b625b60c56c505"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/tenant.py":{"size":5659,"mtime_ns":1782688281816798167,"hash":"0192db8ac9c3de42fe8ee58324c77111e152bf4c35fd15c0b16467fe243712f0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/biz_no_generator.py":{"size":2534,"mtime_ns":1780108930726090799,"hash":"e6bd375987e47f6ee80294686db64377938a286767bb28324f3eda2ad39ad546"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/__init__.py":{"size":169,"mtime_ns":1780108930725878047,"hash":"340e3c08174d61829012879e684f6166803b88c819c58b54a16a11d210dea85e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/role.py":{"size":9417,"mtime_ns":1782688282481859519,"hash":"008550fe8efce5310afd3d41d944cee4b68d71763a587583f8832855480477f7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/menu.py":{"size":7600,"mtime_ns":1782688282878700273,"hash":"36951a77088782d80500bfa6266b46a564a670e10b70af7a28cdee8c50741098"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/site.py":{"size":6525,"mtime_ns":1782688288935534527,"hash":"a7bf593eff76d08b338f48f9a035fa1493f4ca88867bf9fdf4e9af06b6165759"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/api_request_log.py":{"size":4562,"mtime_ns":1782699354647000111,"hash":"f233bde579c4f6c7f2fd6030878c5946fb5dd5e247efaf4fe80d3f48622c19a8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dict_data.py":{"size":5418,"mtime_ns":1782688289691482227,"hash":"5bd3fd93c60956dab0268e9f4e6cf315d0a9c9656d649f4abb40858ba1d32911"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/ethnic.py":{"size":1012,"mtime_ns":1780108930727448890,"hash":"7de1eb94b9fbb897a7b362ffdb5df5ab1020aa7247c7c37a2a2a2aa5cdbac8ad"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/workflow.py":{"size":25052,"mtime_ns":1782688290021142467,"hash":"6ca7e3b79e91356a050592b768d7a6749e1bfdb2841a208c7235899603368aec"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dept.py":{"size":6604,"mtime_ns":1782688283203296227,"hash":"ebb38fcd527fdac4dcbf0632ac926e4cbe95dddb5fab79c3142b010e7a48ea7e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/base.py":{"size":5360,"mtime_ns":1780108930726010257,"hash":"49fdea023825ea249923b1cb02d353dcede1850158d3555a2082887925e69b9b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/leave.py":{"size":4765,"mtime_ns":1782687678100096646,"hash":"847095009bddac2d77dcbb485bcc57cbe168ff874989c197f49f2a28675d2525"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/public.py":{"size":12682,"mtime_ns":1783858998986861832,"hash":"b98ac3f3bc95c2b42c481ac9ae9137528e55845d425e5d2184827dc424304e42"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/__init__.py":{"size":665,"mtime_ns":1780804649232229595,"hash":"f720195209c1783d8b2526220a086c2ae2769d76a12bd7df74136f5432c7b75f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/menu.py":{"size":30932,"mtime_ns":1782790854866245387,"hash":"4e9de047e67ff365d17ac28d30e1baa72cfa3c651caa1b9776e225fc07da0e58"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/admin.py":{"size":50055,"mtime_ns":1782855138852859245,"hash":"a5e74057222e3359f6077b2fd05b2db4d058ec2702243cc449bff8d448d44a05"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/workflow.py":{"size":21202,"mtime_ns":1782790854865038715,"hash":"3950dd8d9855f5ed33a0e15883f7e442c4e26bc51672209b1e68ce0d0c9ce399"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/leave.py":{"size":6916,"mtime_ns":1782790854865571301,"hash":"6e03239433bbaecc54f72fa2aba2578573ae6c7fc881f287ef57dafed1a0f1b5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/workflow_callback.py":{"size":3584,"mtime_ns":1780108930810395025,"hash":"a033c13c7bee7f4b636198c1efa47f2abba0d890657e52b0b7057568d4d83a52"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/workflow_engine.py":{"size":14042,"mtime_ns":1780113992914903818,"hash":"5c06a59c734f598d5c7ebe95d30f048ba3a97302b938bc9320d97e5a053c7aef"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/web_auth_roles.py":{"size":5592,"mtime_ns":1783858473640363111,"hash":"04c2cd67a7ec8190aa7a9db717a722cd347a52279ac3ef5bd284777f0698a904"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/ws/__init__.py":{"size":26,"mtime_ns":1780108930810617026,"hash":"d4357444e9b5b0a8593000fb6e4dc37469ebe008e675bf42ec0d55d463f88fc6"},"/Users/zlwu/work/00code/shanxia2.0/backend/README.md":{"size":2752,"mtime_ns":1780114581291841672,"hash":"f5def8d25af0556a443c31a73e81f958883b60cfed8b31fac457f2832c2b6d58"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/crm_models.py":{"size":66592,"mtime_ns":1784122553836870448,"hash":"1a0a09e5f5d9eb2d5e18e2f7d851287442ee370a3abfbf0b487ee4b4a18d43b3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/__init__.py":{"size":0,"mtime_ns":1780201410213315055,"hash":"a6d57250b43cbdecb56b7a9d55d29642b808be368733e14b7df2bd196f54d64d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/product.py":{"size":7820,"mtime_ns":1783820526204158517,"hash":"b8d626eca1b0fc6b0216a66afb1cf234155310d3077d940d5158111f873a414b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/__init__.py":{"size":0,"mtime_ns":1780201410210254759,"hash":"9b8fcaaabdc85883c9ef392b596b60db0bd3b2f1623fc8012e55003f234a9875"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/product.py":{"size":25974,"mtime_ns":1783820522540308906,"hash":"6d1fb7bc06a4f16c729b1b226377ffa38b9b47bf1cc75310dcefbb8f6e480574"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm.py":{"size":151289,"mtime_ns":1784119033682636742,"hash":"ceaa64369ef66891310f391836c580beefd5a69854b3a5a0539a419744a311b0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/customer_pool.py":{"size":9646,"mtime_ns":1780202350147822837,"hash":"4f0ab87e7a12534011b69f58079ca206d5443eee594849ab4aae728bb847de0d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/tenant_context.py":{"size":693,"mtime_ns":1780201410210198550,"hash":"0a810658d894d35b9e981faa1448e1d02d617ecbe563bd711f6ce5a8f9db1861"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/pool_rule.py":{"size":1848,"mtime_ns":1780202212734233591,"hash":"b0331e17e801d206fba2fa89df1a66d1758d850dc5547e076218e16c8211a3e8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer_pool.py":{"size":1340,"mtime_ns":1780202198698231150,"hash":"7a6b76e0e39ada0783dfbee92280e9f06299b6662b08abb13ab1b0d9c70fe370"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer_follow.py":{"size":3716,"mtime_ns":1780201410213934514,"hash":"3979cecd62a4f2ee5dd925639572208e36b397620d91a9ce49a59adfcb2a9d55"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer.py":{"size":13811,"mtime_ns":1783823672041317102,"hash":"b91167282158aeb11046dccc4bf2f29a13307a0413b3d7b3c860b17d37f8ad4a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contact.py":{"size":4856,"mtime_ns":1780742840975948859,"hash":"60c714cc254d70f39b43205bbcb7fb4c563e807ddd070eefaaa952ae96048377"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/pool_rule.py":{"size":8816,"mtime_ns":1782687680547203228,"hash":"779f7f46e7ef8bfba27390d56fa071dfd3a8446d9d3b3361003b1c239f7169aa"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer_follow.py":{"size":8121,"mtime_ns":1782687665525772610,"hash":"ec67fc7667847017a8d8b5a276f5c75328bda7fa360746d80c7890de3f6d4b76"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer.py":{"size":23825,"mtime_ns":1782687664490640155,"hash":"5d8934ae6318de87b0761686fe491a7ec2be02792a85d84308c383af3193fa8a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contact.py":{"size":10482,"mtime_ns":1782687664918872966,"hash":"f4e3a684dd7a6c7c927e10e8e1e0c108c151b963777b85c5b74d7e7871f3a438"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/generate_dict_reimport_sql.py":{"size":10692,"mtime_ns":1780201410245078685,"hash":"a4faaf61f246dad04ec3933083ab4348e5d2987ae1ed34b1f6d8f19535642a05"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/statistics.py":{"size":412,"mtime_ns":1780201410215906642,"hash":"fb1957d0fe87f22c37ba5bdaa5f3bf2bb4a40685a21a05dce98326581bb4844b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer_pool.py":{"size":3725,"mtime_ns":1780202237342131933,"hash":"0f26ac2bcb585241f25302787184db4db422934e5d896ca25bbe7efaf61d92c4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/statistics.py":{"size":5642,"mtime_ns":1782649310467813967,"hash":"f954dc5479f42a52fdb3f05ad9076fdbe43e569bae85299fca6c8f37c7323cde"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/invoice_info.py":{"size":3104,"mtime_ns":1780406386885207867,"hash":"a59df3aed2c976904e3b5325fedd1621435b322645aa71349f3356e0cdc17424"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/oss.py":{"size":1584,"mtime_ns":1780201410212966513,"hash":"9349799b02a3531d8e1b46f9f70d3b6630afd7306663c779bd11f25448a16013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/invoice_info.py":{"size":7446,"mtime_ns":1782687666050313280,"hash":"e0f2069c43cd272e5f061d30b47a42140ac37aa26379985fc781f8a3851aa44d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/opportunity.py":{"size":9391,"mtime_ns":1780242127112297110,"hash":"2e068961824a1d3ec0da0a94a3c494b63582b3251e5f4e030ce3e12897e85002"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract.py":{"size":10565,"mtime_ns":1784195323916483606,"hash":"45d9dfeb58bda22227fcd242c738086431616466bb8ee9f1466927d75d4bec48"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity.py":{"size":42231,"mtime_ns":1782687666592409903,"hash":"75f54438002e070076fe37ec2211c5fd67bf4aebd2607ac94db15e30d6f634d8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract.py":{"size":92433,"mtime_ns":1783763318740360571,"hash":"b2362db2f2df750afc1c2263f5e6ac1ccd5daa8b93ad5650d56028f452597837"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/monitor/__init__.py":{"size":1,"mtime_ns":1780242127108406092,"hash":"bb5b318d3cb224c50a2e0286e145f89ea7278437437fd17d7c865d67ad148076"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/monitor/operlog.py":{"size":1069,"mtime_ns":1782699353340106185,"hash":"b9f0a382f8990f69391b26bb75b4538d141d6adadc4260fecaa8b33cb44c063d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/monitor/__init__.py":{"size":1,"mtime_ns":1780242127112307360,"hash":"0592c62ce1172d93aca98cbd9aaa54b9c2668022abf3581249516472db312293"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/monitor/oper_log.py":{"size":6673,"mtime_ns":1782699352542520022,"hash":"0586702734f693ee099af38d407c71cc0a840153f93174699c5a5201e0a9acbe"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/monitor.py":{"size":2789,"mtime_ns":1782790854865860510,"hash":"5c13164e49d7ecb6836cf8e65a705fccd518399b85d3be2318c9581a98bacd51"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/clue.py":{"size":9417,"mtime_ns":1780215022189075651,"hash":"2676afaecac4bb6da185674a9421dfbd40834ca21520adf66bb6b175fb728677"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue_follow.py":{"size":8493,"mtime_ns":1782687674053739962,"hash":"54881f876d1842ee4a344d049ea4b5bac18b243535338077cb3eb3ec8b60e9c1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue.py":{"size":25820,"mtime_ns":1783155705954031080,"hash":"3526af7e7e79d505911690355890ccdb3a1c30d302534ffdc8626a454cc2499b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue_statistics.py":{"size":11229,"mtime_ns":1782649305846991404,"hash":"fbc3b4f3356256787839cc5b2a6f8dff41dcf9eb27c791e427e816e3ba14e094"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_follow.py":{"size":10069,"mtime_ns":1783821986040417425,"hash":"06c9f3deab3472b20429c12a618ae2d4d6efd3afa2353ac44cd52651a596af4c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_product.py":{"size":10346,"mtime_ns":1782687669972916544,"hash":"40b497a41ce4003e128dc305abedc54e01dbaad8a8f7bc1ecec1662a3953a1ed"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/crm_export_columns.py":{"size":9594,"mtime_ns":1780743830255260394,"hash":"b20594507aab09cebc3d540acad04547bf780cac9c885187138f5d64718ed513"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/__init__.py":{"size":0,"mtime_ns":1780242127043319167,"hash":"a66deceefc987198863f61b8aa1b5715483a69c4a15ef47cd5586c5d8e429b97"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/excel_export.py":{"size":4411,"mtime_ns":1780242127113233948,"hash":"7fbde3fca845e4705487e7f801caee308bcc0c99a9da7d0c99681a96eaaf6076"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/supplier_info.py":{"size":3679,"mtime_ns":1780242127112269527,"hash":"8b797e9dee6ac7ff806a8ea23bef5fedce648502ea23287e1b417e9f96d22c2e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/supplier_info.py":{"size":6916,"mtime_ns":1782687684650105460,"hash":"0b66714e36609688f7ce79ecda0679d20df115d2d64a0dff1cc0fc76df7dca6b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_product.py":{"size":13126,"mtime_ns":1782650413581368849,"hash":"cd2fc23852ead3c4db19e34bc33c1560fc5f5d4cd7cf51b61def8bf37c44c853"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/quote.py":{"size":5961,"mtime_ns":1780745856749183842,"hash":"29c52786df396aededd0850e3c8a3a36f3fb6a952af03adbe1768dae212b6804"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote.py":{"size":48137,"mtime_ns":1782687675213433843,"hash":"a2ff5c5b74a2becd0949aab6aea8cf63440cce2c0bb22e1a1661463e0b2e963d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_product.py":{"size":10537,"mtime_ns":1782687676011228777,"hash":"57d9d5b4fc2bc8b68c0388a4b8a9c1322539ed7e538764fc23521916429e07c5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_share_log.py":{"size":4277,"mtime_ns":1782650254630170341,"hash":"5bfbf7ce2918f9ecdbbca6fdce17d200cd52cdc71b2dfb44ac126a36ca0ed734"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_approval.py":{"size":8816,"mtime_ns":1782650314936479798,"hash":"736353b8c2c5073d260e007a166234bd7d57958bcc738c56a1d39cfb22381180"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/crm_quote_pdf.py":{"size":9877,"mtime_ns":1780242127112382277,"hash":"fec04892fccccc3601fbeb012c92c77110496910be44102de40b4610148fa58a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py":{"size":25633,"mtime_ns":1783825326810765171,"hash":"c51b70766aae85dbc537bf5b48a2c350c73ea8e93bcad2a9660d8d45c6d0979d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_approval.py":{"size":13958,"mtime_ns":1780763324103831772,"hash":"3d7fbbb90728568a2577e52d8986ccbec8f599d04a0ef9e330939d1fe729bc98"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py":{"size":29547,"mtime_ns":1783825526614169736,"hash":"95969972c0773528b91d9728d303feae5ca7187d89a49495d5129dcedffc19dc"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract_template.py":{"size":2897,"mtime_ns":1780229101351431207,"hash":"935adfc7659e31201cd83ba8387bf6abcb39e7cdc63fa4692d699ed874cf113b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract_change.py":{"size":2496,"mtime_ns":1780229100306468735,"hash":"05af42f088f6cc400c1e3445d4a2c96670edf482328b361aa4f231230d958729"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_template.py":{"size":11858,"mtime_ns":1780229131746659196,"hash":"b9bdbe6a33c933aefcb25cc57e94b2fd2dc75f8e5822434f3912aa0153dfca00"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_change.py":{"size":15985,"mtime_ns":1780229123819597506,"hash":"771b110d3d136c45106dd61171c724c559b5b4bf572ea7b8c2b648f0bfe629c1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_contract_sub_routes.py":{"size":25165,"mtime_ns":1782650354912882614,"hash":"b2733fd74cb7e6cbe6518fc5a5700e387601afc087be09f395f3c61372099847"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/attachment_biz.py":{"size":1122,"mtime_ns":1782219602888987090,"hash":"fb9fea8983524e3891357016b6546d982c4a82cb782fc01425f70472d4338b6b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/bx_auth.py":{"size":1473,"mtime_ns":1782650780925056463,"hash":"678d9ff99b5c89575ef47e5c9e61d495f364917fd6cfb2b322c4d5035d3ba359"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/bx_date_range.py":{"size":2363,"mtime_ns":1783745556349035158,"hash":"e8b487a9bb4072356cae7b1b38496c441f9a1534d6807798448e6de97073d669"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py":{"size":4679,"mtime_ns":1782003396630684570,"hash":"bc3f798cfbc359e0327d72e3c0513fe9cbaee196d0d85bcf6567cf5df4211d97"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/bx_models.py":{"size":16644,"mtime_ns":1782003187247224106,"hash":"37c7372f38d76f1020d31ce8ca9e7f0cb3bc3c204a50deb092b494ce8c983fbf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/__init__.py":{"size":81,"mtime_ns":1780750556881734563,"hash":"07c3422f745afbff1c8162b3782fbb4b8de65084e7e9bbcf45abb9d433d65f98"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/common.py":{"size":1547,"mtime_ns":1782003187605255900,"hash":"a75ca6a0d92f93408eee00cc5053206d28a545512e4cd0f186be9e00e3346ab1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/__init__.py":{"size":777,"mtime_ns":1780751360180065853,"hash":"3525eb716c238682a07a116818d318b8a494fb24b9cefca5114d30bc50d095a5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/expense_item.py":{"size":1668,"mtime_ns":1782688293668634639,"hash":"ac07c7b05fe990e743dd5b4e96a85b59431479ca11b98cce7c340a93dbe99ce1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/workflow.py":{"size":1677,"mtime_ns":1782688293973889288,"hash":"f683e5bb7a45d0bae3b3f262c201453155eaaaf2c8d7f14f567a14295a68d2e1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/expense_item.py":{"size":3362,"mtime_ns":1782650913604714906,"hash":"c6a142011870516822cf11cff16a86c56908f00680eb7c6219c8441c9b63632a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/workflow.py":{"size":4984,"mtime_ns":1782650913326708063,"hash":"84285aab7499ce9280156c5814b2dc4fff42841803dd673cc6bfdc6eed498283"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/expense_item.py":{"size":4366,"mtime_ns":1782650887981843546,"hash":"15321fe1df77a555af579474434e3b401bd042555d19ea81a066ef754915612b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/__init__.py":{"size":34,"mtime_ns":1780750594045301798,"hash":"583b12a6d2c9fd4411b652741e73324df9256138946ee873a0ed03169f8dae2a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/workflow.py":{"size":5446,"mtime_ns":1782650919964956073,"hash":"1d72733147e0ed997094d7f92d1c1f5e1e108093a50e8e523b3b016c3dd676e4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/base.py":{"size":3931,"mtime_ns":1782687617846731919,"hash":"dba80b8f4e26bc59efd2b2aad6bd430c0315133a98bfbbe1b93113b60baba8b8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/attachment.py":{"size":525,"mtime_ns":1780750871480000584,"hash":"f287214c72345e41d9d122ca55b4d3e279635d99cbf10ed530de0ac32374f31c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/advance.py":{"size":4603,"mtime_ns":1782688296833335474,"hash":"74b6e8bf6906518f80f16f218f1af74d2c356a6f392a4e8a69466f4179ce0b92"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/attachment.py":{"size":5758,"mtime_ns":1782790898570675189,"hash":"e88b9181e7c1a839074656ce2260cd6f693821402a24f08dd1c0ef3c160f8fa8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/advance.py":{"size":13370,"mtime_ns":1783745567004734594,"hash":"3097a75d86d09951d7de7df10a32f5aedcf6ce11279bdf6dfe0005ec9d8a7be1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/attachment.py":{"size":4582,"mtime_ns":1782650868959755751,"hash":"3a6480cd051bd1af733a67e5babcd64f3f74cbe230d72364b599cde8b0c67a5f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/advance.py":{"size":24037,"mtime_ns":1783746967707088251,"hash":"4834348d099b32b70d14e1b56279dbb385f42519646351d8cb220da8c5fe27f1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/storage.py":{"size":3656,"mtime_ns":1780750869826924187,"hash":"ac98980bd5b6cbab6a9394b6debc678b050cf4df969eccbc5f2d419b615937cd"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/reimburse.py":{"size":5638,"mtime_ns":1782688293517624966,"hash":"aa47d8e87982a4077ff067dff2955db9eb67171d6368bc636c1eea17ea7682f1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py":{"size":15431,"mtime_ns":1783747621462206303,"hash":"dae4bfc4be69ca2f3ee8fd2e9e3bd6053a2904c8f7a0c83e536f2dd71874f918"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py":{"size":34743,"mtime_ns":1783747614591546341,"hash":"ba8f3ff0304a6668bde3c2e6c3e15427153389f7320b943fb261d1d947b41d1e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/payment.py":{"size":15715,"mtime_ns":1783745581266319098,"hash":"0d0b8823013a63f91baee0ea19b56f203e70fb1e450f873cfeb634a6cd017f54"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/approval_cycle.py":{"size":1296,"mtime_ns":1780758200904804714,"hash":"308c087d94ac253bfc7e2d5455a06ae8ceac034adda41b5c61dd315dc167efaf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/db_models.py":{"size":8110,"mtime_ns":1782219570945208920,"hash":"249bb0971c263436095a6324457557b6ac5cfc3ca5ac9bc9499a9b4cd21d42bf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/__init__.py":{"size":544,"mtime_ns":1782011200096708592,"hash":"822060230e155b8704feb447b908c226d4c53e62b3e6df65c89dc3c7a0e6e07f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/__init__.py":{"size":0,"mtime_ns":1780805614160787709,"hash":"2cb780fb722e6dbf2ecea6f6fc19345fb453e1a3c40694ba0ff7465eb7cf7d33"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/base.py":{"size":2754,"mtime_ns":1780802262496001324,"hash":"d2fd88aa376aa5914125381cf61a4ae0f343657d6bd7db1f9fe1254e7aba5b2f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/vehicle.py":{"size":591,"mtime_ns":1780802980783200520,"hash":"d87e4262b344e02a7be21534e382e7b75f5543f599d673ddc046134ad0e8ba4e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/__init__.py":{"size":84,"mtime_ns":1780804619867600032,"hash":"5193d61f7204f825551f083e79722805fb2abfd953bb552e80950bb3ff9784a1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/vehicle.py":{"size":3780,"mtime_ns":1780802985736476363,"hash":"aeb49bdd49cb5091c37275b856396e75bcd24557e3a1b58ef668910b1b0aff64"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/vehicle.py":{"size":4776,"mtime_ns":1780802999039302982,"hash":"cf32c66499ca86285561b573d222837ecc76c3fa51b0091b802485fbde8e2bf2"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/plan.py":{"size":1788,"mtime_ns":1780803836065964235,"hash":"30452b2f7fa19f5677475ce08b3e355dae2440d80d2e9049f8417de01d822863"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/plan.py":{"size":4167,"mtime_ns":1780803836065953735,"hash":"acac159dedfacb36f02982b700b2a7c7a8fbb4644eb89c3b0c13871941917864"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/plan.py":{"size":9619,"mtime_ns":1780803836065902943,"hash":"e311f2b8b5e7785db764216fbecfd2830a11569ccb827a00c8bd3a2ba3804383"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/inventory.py":{"size":3948,"mtime_ns":1782219604456801044,"hash":"19ea80e59a1309518ad6183a6b0b8751401f4724d7b5101d47defc2417ec36c8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/inventory.py":{"size":16423,"mtime_ns":1783156035144390497,"hash":"901602a8fe362aec9b89ac6f2ee578f1eeb105fcf12a1a6c3ff4ef98f4ad1ef3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/inventory.py":{"size":10663,"mtime_ns":1780803878293678536,"hash":"e38abdd78010b0e96dcb65ed826de03a752b40e3355546ed06a4b07640cf7013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/weighing.py":{"size":5347,"mtime_ns":1780935341753643087,"hash":"f734c66269b713a840d7ce6c1c6150bd2dc00b114b09963362202d119c82301e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/weighing.py":{"size":14940,"mtime_ns":1782687688848020877,"hash":"71d143eb05d0d3f785f5962892bde64dee3c2937139c975b52af62628f308d46"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/weighing.py":{"size":24042,"mtime_ns":1780804029884092079,"hash":"bc9d5cb59bf90597db0e0a1c9afcef5c2b429c3945c92be34bfdc1e77d26ba28"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_auth.py":{"size":2500,"mtime_ns":1782790853674329877,"hash":"4988b71d4e54b326c333872b34743914d67b15fb753c1b0231e9b00b366458a4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/plans.py":{"size":4876,"mtime_ns":1780935329287069452,"hash":"474cb68905249cd5a6237443a412d49cb28af2e0cec61c9bf5c34ec54db1240a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/master_data.py":{"size":619,"mtime_ns":1780925759582999052,"hash":"6f6b2c2e1478efce74b8c6e6fb058d914b8b79adfadf2fea2d91cb55d3f9cdce"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/vehicles.py":{"size":4748,"mtime_ns":1780925781827569662,"hash":"8f8b32dfbf4046cfa0b6645d211732596f7027d46244d9c50132425220065483"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/plans.py":{"size":17098,"mtime_ns":1783156035873015369,"hash":"bd2c8344e2ab765ceb2a2c91f5cf2facea319ae66c9097f5468a7f5d753b67dd"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/mappers.py":{"size":6955,"mtime_ns":1782219619253708711,"hash":"b9e97f66a0a248d06c2f960c3f5ac4fb3369cc976c16709227dee0cc1513d221"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/weighing_logic.py":{"size":4110,"mtime_ns":1780804818442134500,"hash":"468ded88a0a4a397a96884580c88c59291c0b6effa897f08f1b3fea7857f9191"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/dashboard.py":{"size":514,"mtime_ns":1780804990870580151,"hash":"f2c1b1014d0d769abf32dab3783de65fe7fe327c956ffbfe44adce94542f8892"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/dashboard.py":{"size":6576,"mtime_ns":1782651340330906738,"hash":"753703fbbe8ddc02d8fbdae78df4abd1448f5ce5878e2f0390111360fdc300b3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/db_auto_plan.py":{"size":949,"mtime_ns":1780805095845033710,"hash":"9f7513cd2e74f9ddfe5cbee4ae58a40ee7a58aaaff051d590b19a6e1b08bb46a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/plan_helpers.py":{"size":386,"mtime_ns":1780805092108105489,"hash":"5c6ec7612b204e1dcb65c5daf03fa7f8ffa7710cd1ace63be4f7ca00cbf318b8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/auto_generate_plans.py":{"size":4699,"mtime_ns":1780935400833764213,"hash":"d0760cb8155d60e18040bcf6fe41e6964640a3dffd6f4b7bb68678c9f31ab29a"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/run_db_auto_generate_plans.py":{"size":1043,"mtime_ns":1780805102157096922,"hash":"3cd8f15b677f21b2873ff384fc0581da264a53ee4318da3c8262101156e3225b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_dibang_data.py":{"size":20215,"mtime_ns":1782011225157870526,"hash":"28a49a423a784e70bec424b702f3d58f69b6f847153c061414efdcdabb660d0e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/inventory_id.py":{"size":2574,"mtime_ns":1780934632326984469,"hash":"c5269cbb273d987c296143b83f1287762ce67d7ddeccfb0a72bc70234bad9f12"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/product_helpers.py":{"size":2106,"mtime_ns":1780935268573313971,"hash":"cea6b0697eb64081a79d18ab95f0f0477714505a7aef82a41672197b15fc8b14"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_db_inventory_id.py":{"size":586,"mtime_ns":1780934647395760353,"hash":"71a9617d5d0f2c23416686eded204b4c941b47afc3fd6e3facf0c75401e883d9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/pl_models.py":{"size":61386,"mtime_ns":1784032430468998611,"hash":"e23b4653b806a1917eba187d8a3584dff598ad74bc21c8295c179abf0bcfe17e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/plan.py":{"size":22053,"mtime_ns":1783754594278544472,"hash":"f3a69a96b7916cb34e23e673b3155d83f7d9698b2582cfae96dedc392da8e6b8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/transport.py":{"size":17945,"mtime_ns":1783211732481443217,"hash":"477ebd0c4c084cf8bccd10865e4703b6b34829d30b791c32232d96c1bac2947f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/__init__.py":{"size":5012,"mtime_ns":1783242582112287271,"hash":"1dced39f250919efc4aa798daee1efef3adcca054c7483843536c455919ff106"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/freight.py":{"size":11275,"mtime_ns":1783213205154827373,"hash":"557f9e9f06ab6f18eb33f54a579fb8ab0f6992d9b25bb530a2ec49d5b2365708"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/inventory.py":{"size":7742,"mtime_ns":1783242580346813026,"hash":"9b57e84bea4844ce93220773544064ed6979c5823b07831bc5fe734b6dc860d3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py":{"size":48150,"mtime_ns":1783945795484267217,"hash":"a9a876816af12e43b3fa6b9dc748b74b7107f0cae590e68a2a789945617c620e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/transport.py":{"size":33087,"mtime_ns":1783155250374329483,"hash":"6f7703d37ce761406d42f3be4e53ee85be0d3e43e5b880401087dde47ec6608f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/__init__.py":{"size":1243,"mtime_ns":1784035957226411568,"hash":"7d66d74042036571b769e5364616560597a3c3347cb9dea6cfbe04c40483b5e2"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/freight.py":{"size":10543,"mtime_ns":1783760751060550793,"hash":"2d64ca83553dbfc928887171941761114c5db012b9c4a01d34e2b522902bac38"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/base_data.py":{"size":33513,"mtime_ns":1783849851800999450,"hash":"133db64dcfad9ae687b90084eb8f1b5f713ebabce852bba26b600cab52e51c50"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/inventory.py":{"size":13188,"mtime_ns":1783242583174353699,"hash":"da03959cdab792ef503edae6ee27e45f9b5a8db1c63cdbcd97bafa85acc9be71"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/check_pl_json_aliases.py":{"size":2918,"mtime_ns":1781880510604174541,"hash":"b04c5636779ecbcb3082eabdbf42db846cc31f7376129845820c6a4c1e829104"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/base_data.py":{"size":19762,"mtime_ns":1783849843323086946,"hash":"21d29a63b2dbd9178f2239d109c4e71e668c2caf85788dcecc34e7533f0df4e6"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_personnel_service.py":{"size":6707,"mtime_ns":1783845044115228598,"hash":"34f3d1d723890e294aac765a66d7e86ca87f4288f42cec674bb9151de091fe22"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_cert_service.py":{"size":7694,"mtime_ns":1783849439910099822,"hash":"7bb0a6d4dfdb1ec11e72e971873791b8e188939e7c6b7328a0a2f4f8986c9d1c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_service.py":{"size":39798,"mtime_ns":1783768766029953703,"hash":"0e0620d2878e4b28c560daf8095d30e8e8a281653d40baf01ef94e899ce114e8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_transport.py":{"size":9697,"mtime_ns":1783209147246415813,"hash":"aac3cfd1a30df824d1a4867c5b358e3155e19a051dbaffbae89c995b55767a8c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_dibang_bridge_service.py":{"size":15310,"mtime_ns":1783777749440894312,"hash":"c506eb84c104ce63b98cde5b16644f16ddcf4e3aa335089bedcb4c267d21fc0d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/public_inventory.py":{"size":1492,"mtime_ns":1783211660985345577,"hash":"ed4e21307ac463410d296a2f8cf53f8e0429187344537bcf1e1212a7affa06a6"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/public_inventory.py":{"size":6968,"mtime_ns":1782790898570930774,"hash":"79aa205d2e5e89ed45dd7b95068b93e3f6db82ee9258b0331b21d6c8ab551582"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_inventory_link_read.py":{"size":782,"mtime_ns":1782225276143253698,"hash":"6471dfc9a1fbe66223f79490a5827b2422e5ca6932305ccde6aef4b641676a6b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_site.py":{"size":8470,"mtime_ns":1783211738132414332,"hash":"08745e00bfa7bd756fbeef7ae7a1d3bf957d6403da51cf7825def02a38502d01"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_site_link_read.py":{"size":2362,"mtime_ns":1782225460524562610,"hash":"3b9e1b93d3c4375b6b3adb4476ceb0df356654089d994aef4fea7e4f29266c06"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_transport_site_service.py":{"size":3701,"mtime_ns":1782225248175867714,"hash":"07585f13aaad965c106e88ac26f5f8c58852c0c2bb0bdb91820185133d799219"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_freight_settlement_service.py":{"size":47560,"mtime_ns":1783213204589333188,"hash":"53a61d4da0cd2e2d0bac74abcca13de3f3d506b603453811d8f1cd53fa50b358"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_data_scope.py":{"size":4660,"mtime_ns":1782649048011371782,"hash":"9545dc65fac7e13bf07ece2ec828ec5957bb115e23d0ac8c996f9c70362a4ecd"},"/Users/zlwu/work/00code/shanxia2.0/backend/DEPLOY.md":{"size":2574,"mtime_ns":1782639356701497576,"hash":"6989c30ab5c99ebf488137e31e5561b4a00d36060716dfad3fc247b673538818"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/data_scope_helpers.py":{"size":3358,"mtime_ns":1782650085670691361,"hash":"b0aab03bc7b3afb2faf39410e9881b65e6a2eeecba592d1655b5b9359fb4dbdd"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_quote_contract.py":{"size":12491,"mtime_ns":1782650163950860693,"hash":"eb6b944df35fda5edb6675b69b00f5a83a75fd78785251d1e81e1788ed439cfe"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_api.py":{"size":14409,"mtime_ns":1782650231443625388,"hash":"fb4cf4178a4b7c5530999f0c950ed38310dfe81b3168c10117849d6f512be01d"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_api_calls.py":{"size":3345,"mtime_ns":1782650279067732462,"hash":"57732d0beb80ee17b533c78ce0250967fa83c68354ea9d1972275ba1fbc39007"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_data_scope.py":{"size":801,"mtime_ns":1782650506729785291,"hash":"0f0275c56a43603e69a030dd1d284cfc7982a7636423cfff6d0e692eb4631cb1"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/apply_pl_data_scope.py":{"size":10945,"mtime_ns":1782650517176615737,"hash":"928fe2112c9fd8bab4da7f4fc67d6d247c78187ca3b1a4146cc2fd3d9e04697f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx_data_scope.py":{"size":2394,"mtime_ns":1782650938092205819,"hash":"1e8e1dbdcf4bc68c2e30b99015e930bb9522bd1f633e95604ec6a62bdb2b43f3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db_data_scope.py":{"size":796,"mtime_ns":1782651142571517234,"hash":"ad4e206ae53e25247ebb004e0ef586077a6e7df0eac7b14973c26b186cffb2eb"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/delete_guard.py":{"size":3572,"mtime_ns":1782687610196676295,"hash":"223d91c51a1677b6a4b7802d5571af14d5cda8bc45e4e757b1f2150990a69bce"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_delete_guard.py":{"size":1565,"mtime_ns":1782687611517772849,"hash":"5e2a45f63b7296e3a10dfbd4b4716e54370e1439248881d6591cba5c9f6581d6"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_carrier_service.py":{"size":3479,"mtime_ns":1783848338604396640,"hash":"7d12991ffd2e3d7b768aaa587d7f9ae1ed4d641f65ec3f053ed103fc74a5a005"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_recharge.py":{"size":6299,"mtime_ns":1782694169098881801,"hash":"4d5ab880c0c3ca91b485e1ba53725005b9f89fe205780d58a738c861dbb7e6f8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_recharge.py":{"size":8824,"mtime_ns":1782693867411719704,"hash":"f084b6fb3e80de0455ee9cfcc857ae5814b79497786367380f3a375b16c4bf85"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_recharge_service.py":{"size":22641,"mtime_ns":1783760938743438422,"hash":"a4a9377a8243e30dd7d6a8a175c68525009465fdebdeb01230849156dd8b59f4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_maintenance.py":{"size":6563,"mtime_ns":1782695447503836332,"hash":"c34b79f5bcd004c0f6353922492883e4b08e5a6bc229f0265c9af850d235848b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_maintenance.py":{"size":7793,"mtime_ns":1782695447583143336,"hash":"79033735d527926ac082200de0b89a122c53db3cbdf5fb33e3cc69f74dd017f5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_maintenance_service.py":{"size":23307,"mtime_ns":1783761151873696556,"hash":"0c7aa346d9879347d6a98c435fadc47873907ca0774147b69acf0d392e00e58b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_urea.py":{"size":5609,"mtime_ns":1782696196169930337,"hash":"71b7de2f90b3c7c732b59683e5cd4d858288121414a1ff2679c039299f5fb024"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_urea.py":{"size":6696,"mtime_ns":1782696220189638136,"hash":"750ecae5cdcc857031e618b87ffa9b28607bd47e72ecf6dc7ebbe51003682df3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_urea_service.py":{"size":19556,"mtime_ns":1782696213546483763,"hash":"03d389e791e5fac9a5339d1259d342952fced97712c3657e8f791426de32743b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_decorator.py":{"size":5312,"mtime_ns":1782701254052728785,"hash":"e476146985da29ad8cb77064d10314470546a8a52f6026a75fdbadd3fee34288"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_infer.py":{"size":1767,"mtime_ns":1782699326717654441,"hash":"4346307abeb03020a7069f560556b9954cf50203efb6ac65b0a4b9644b6a9b2d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_context.py":{"size":868,"mtime_ns":1782699327268762002,"hash":"064c356f3f0fbabc454311445f02d375b965c2c055ddc51386d4dad50ac3337a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/redis_client.py":{"size":1691,"mtime_ns":1782790834895168051,"hash":"e5d84d7433ce745da7a37fb46dff5d5eb6ae027ef0efbf406da0c9c7fb6089ad"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/resource_snapshot.py":{"size":3823,"mtime_ns":1782793446819247296,"hash":"2d65c990d058d22010f8d4449652eb752c297a046b5d7b3ff6755c3e1cad0cf3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_transport_resource_snapshot_service.py":{"size":4861,"mtime_ns":1782793450356380638,"hash":"6f94dcb582fe725738a54469e461aa0124b9754b2141cb78d3859ff1a2f25ca9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/datetime_parse.py":{"size":929,"mtime_ns":1782905360746020898,"hash":"7a4eac85768cbeb0ba76f7f478ddadeeacab2498cd9be4070a76e1cfad693cdf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/transport_address.py":{"size":2604,"mtime_ns":1782906539731495489,"hash":"6548b4b0c8c1d8096ce96ff1d5b523c67b12300f9a3eac66570b0256478a1120"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/transport_address.py":{"size":6875,"mtime_ns":1782907484528042124,"hash":"7880a37b53dc2e88534ca5750097792ee7e893c94d87bf1eecd8b6055fbba181"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/pl_cert_expiry.py":{"size":711,"mtime_ns":1783208067000967398,"hash":"7c02dbf83fad89c7da757965b545bf77f37792edd0d01d3ed320349b0b60a50b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_delivery_slip_template.sql":{"size":217,"mtime_ns":1783231586212866839,"hash":"e05e3fe7255e6c8a88aceb1aa53d743a4888a34c9fbaa4449c1cb8a275744d68"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_slip_template.sql":{"size":191,"mtime_ns":1783219958449266456,"hash":"e2a17c3df7be5cc0436ef979a48de81eecbe99c03f43662f4b0954a09dfa1305"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_template.sql":{"size":215,"mtime_ns":1783238744737524455,"hash":"24cf12e21f9f61f49c38e654c0ca655f56a21e5e2364e4c2ca4547dad583272e"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no.sql":{"size":203,"mtime_ns":1783240340132373787,"hash":"de9b3c8e1617b9c345b2d4005e4a627f10ded089db89d35f0b389b333b840c08"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no_format.sql":{"size":571,"mtime_ns":1783241697391655899,"hash":"61fc58ebda64c5d6be6bfd374dda99c7134e38dc89031527f71916625c4e36db"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_product_legal_use_cert_url.sql":{"size":1180,"mtime_ns":1783253793703960795,"hash":"01105ec581050477087d9bf65528cfe77ce0026d0fb682cba8014c4cdb046db7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/menu_badge.py":{"size":247,"mtime_ns":1783257567212910729,"hash":"88c31e5ef8cee73327a1a0f36ea7ae0e61fa8f1ae140ad95ed0c0b9c2b4d05f7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/menu_badges.py":{"size":1203,"mtime_ns":1783257582921626135,"hash":"05dfdc446281abd9c3b273ebae2f9cbc4efe681fdc0ab288a77903e9e2bf83c7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_menu_badge_service.py":{"size":6108,"mtime_ns":1783258109621359209,"hash":"aec342e2370f584c5ed0024bb08a8346c70e1827c09ab456b4b06e9dfc817d8c"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_bx_menu_names.sql":{"size":454,"mtime_ns":1783254856670799736,"hash":"d40ab4c556ab285498f4689c21736832deddc754a9a2b7d806e870ccb39fc9ae"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/seed_sys_menu.sql":{"size":82266,"mtime_ns":1784119136237565207,"hash":"e0c15f9bd4525b6e447a7e8da3aa6bf93c14c47a1b99dc5cb4bee9dfd1a60e8b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_menu_groups.sql":{"size":6367,"mtime_ns":1783256049450807031,"hash":"5f6964d1ea2712d3d72c8f43f08c16597d85fe79f3f54c8be99962090d6c2b67"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_doc_reminder_menu_group.sql":{"size":1562,"mtime_ns":1783256051207137180,"hash":"82a0ce8c5293f5051967633c1c2e0a1dc60e1fc7c97919c9e0866246bbcbe3d1"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260711_hide_vehicle_urea_menus.sql":{"size":269,"mtime_ns":1783760394518896877,"hash":"a5f66647cdb4f0f403689b47b804f8099d7d710753823ef3ddc5e7a5a9ca4ca8"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_dibang_plan_quantity.py":{"size":4258,"mtime_ns":1783777759829460303,"hash":"6af8eb3c1f6c7ad34cd62f1e82e9c6b96737ffd48ba74dda7c5f888c55dd11cd"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_cert_required_service.py":{"size":10503,"mtime_ns":1783946967244318920,"hash":"07991890446a106b2d520e5e3c65e27af90c13d00945516ef1ce9bdf2e389879"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_type.sql":{"size":1662,"mtime_ns":1783843576747470605,"hash":"24fcd156f97e2bdf2bd158beb5358fe7159874783a84716c6c18d2565cc8ac1a"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_affiliation.sql":{"size":753,"mtime_ns":1783845019912997576,"hash":"6d450d264921f43c4e74ee4a2bcfc8335d16f77d9e0413267389741a92bf4eb5"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_add_finance_dept.sql":{"size":1697,"mtime_ns":1783855927743333340,"hash":"4ce457089ead5c063ae8e1a6d6553416deb43c54a7edddb574ee2572390aba99"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/setup_business_roles.py":{"size":14256,"mtime_ns":1783858477739135462,"hash":"ac12df2cf75826931c85f4deb3ae28614e31ea825d0beb3cf351a8d4f5cb1071"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_reset_sys_dept.sql":{"size":4517,"mtime_ns":1783855538627076795,"hash":"3795d6127a4dcf55d406be0fe673b8a83655723fe1f07b855e6fe45823d489fa"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_users.py":{"size":28602,"mtime_ns":1783855936414773748,"hash":"f5626fd3ca8bbc16275862080365c3ea2a27fd0f608e2243a284493762a8f735"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/verify_web_menu_codes.py":{"size":2535,"mtime_ns":1783858485781974173,"hash":"16c9c072b5b80fb309d56823963ebd0dd1f437a3f74d7f82711dd8a7c2de86d2"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/refresh_business_role_menus.py":{"size":3812,"mtime_ns":1783858483854587001,"hash":"b2c76109936791e1f624e239b24832237fa0256b38b98578e39825ac215fb166"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/renumber_crm_product_no.py":{"size":9071,"mtime_ns":1783861492796558653,"hash":"320c63801100ea8e9fb62abfb44b3487139377e293310593a877ab2d06e9d2e3"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_product.py":{"size":13287,"mtime_ns":1783860925852062495,"hash":"3e5dd462f2ad6218d2547b66db741132d0179037e6dd3ac24ddaa02a5b970d4b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_product_category.py":{"size":15583,"mtime_ns":1783860690842141129,"hash":"9cbdfdf3335a366aebd0a605431b3952ea9aab26bd564d075d501479ae0b20f7"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/compare_dict_snapshots.py":{"size":11072,"mtime_ns":1783860128258640426,"hash":"cfc98cc72c5e387317cfa0a7670c47067fffe8f2e540d5cd580ee459e173e4ef"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_sys_oss.py":{"size":22858,"mtime_ns":1783885816251409459,"hash":"20f59e7e19a0c4415bdf17cef32a31db63220346688b3dbe06bc2c52a42d475c"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration/minio_url.py":{"size":4770,"mtime_ns":1783884947929403985,"hash":"54a1bf95512c0a8b5feeb518ea3af76983bb1b0a3ba645898b07debdb2cc52e9"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_customer.py":{"size":25235,"mtime_ns":1783886258025843303,"hash":"f30d5a50a28a1130325a9d9db88586bcae9e2a39434f077ded25f847af2ed66f"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_opportunity.py":{"size":23720,"mtime_ns":1783887271166904779,"hash":"f98964806f32c3020bdd7d644d930760d6ea3ad5162d5f1d6125494263dd5598"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_payment_invoice.py":{"size":13601,"mtime_ns":1783888353771580120,"hash":"c4af77164dac9ba4195c3d239c9679ea367b92f5f7500139f3b59547525af24e"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_clue.py":{"size":18423,"mtime_ns":1783887050391179085,"hash":"72b84e497176bc63264c26d891c591c839f9dd9788988043c5752413c1b62a09"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_bx_data.py":{"size":32783,"mtime_ns":1783888844450695833,"hash":"16751fcd542e209535216a0516d78b62eecb81732d7fe0f9ec051fdf811e93b6"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_contract.py":{"size":36188,"mtime_ns":1783888258230435217,"hash":"a6269c8eeff19f4ae8ff7d22a3544ebc4a1858aaecd59583e6afd140a7fa766e"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_quote.py":{"size":27580,"mtime_ns":1783887475224438064,"hash":"4ac389eb6cb7437d4f5e8203d9908efec9836046ce8628a5e4be1f8b8ddd52cd"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_personnel_cert_required.py":{"size":2829,"mtime_ns":1783946968430310316,"hash":"e89b3aa798794dc77085af5c4b880cdddcd2c0590c3cc3414f8a5389fd5f6d93"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260713_pl_personnel_cert_split.sql":{"size":3436,"mtime_ns":1783946793684378982,"hash":"ce61899ec7e13f41de08dbc923dd1ff2a1a976603d13c8f09aa6fd5be9c914a2"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/ocr.py":{"size":1889,"mtime_ns":1784035957225824939,"hash":"1de70651a8c1c9e0e208bdccb45d0b9c7e7a0f8f9a663941bdbd5ae278234b1a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_ocr_service.py":{"size":11166,"mtime_ns":1784036700055450000,"hash":"6f233150e253813a7c9da30e6e5d6046fdea01baa67c2589a332fe511ab795f9"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/test_aliyun_driving_license_ocr.py":{"size":5130,"mtime_ns":1784032210609057675,"hash":"13d43c9144c3795b8870fbd900ed14f97ae22ee043e2c265a5151525666abebe"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260714_pl_ocr_usage_month.sql":{"size":1270,"mtime_ns":1784032423540552834,"hash":"d7018a4e5be9760846731440be98e53584d8e1461fc4ea54a0c8db61c666e7fe"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/price_letter.py":{"size":3994,"mtime_ns":1784122554297827011,"hash":"6cd75fdbbd6a2dc65cf0b0b29e6206910fbd86f8bedf05bb56a8835130b81829"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/price_letter.py":{"size":13292,"mtime_ns":1784122560635390924,"hash":"1edbd17d41fcc4205faf15de5ce47aecc5459a39d06a920689379a65cdb9c3d9"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter.sql":{"size":11104,"mtime_ns":1784122573332360310,"hash":"548dab479fcde4bf1628ca2093fd7840720473a774a5289b55bfd4f46b902153"},"/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/Activate.ps1":{"size":8593,"mtime_ns":1780108930820914793,"hash":"ed2ea10761f2798e8980084d754284d3fcb94f1284ae7085c35c16108fe24846"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter_bill_price.sql":{"size":901,"mtime_ns":1784122547991214820,"hash":"11a4eb6f3b4d89c1a5141bd9a85e931517984b77ac213f5842dc590f928fe1cf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/__init__.py":{"size":21,"mtime_ns":1780113982000000000,"hash":"60a04ff08fd97084e83ea809fd13feda6d2848be20ebf309e31fc1dad7523230"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/__init__.py":{"size":665,"mtime_ns":1780804649000000000,"hash":"f720195209c1783d8b2526220a086c2ae2769d76a12bd7df74136f5432c7b75f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/admin.py":{"size":50332,"mtime_ns":1785469147058813215,"hash":"b2038d923003b4b9c0545217d6f8077b811fe7d15881a56daaeb28eac3024538"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/__init__.py":{"size":827,"mtime_ns":1784980394000000000,"hash":"8bd7939017216a2b3c9ea7ed910167f7baf5c02cf724c10b392f6f286f6368a5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/advance.py":{"size":13404,"mtime_ns":1784992736000000000,"hash":"e09d555bad6b1a0ab289d045dda5a4231a54316e34616f60b03f724f9152e73c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/attachment.py":{"size":5758,"mtime_ns":1782790898000000000,"hash":"e88b9181e7c1a839074656ce2260cd6f693821402a24f08dd1c0ef3c160f8fa8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/expense_item.py":{"size":3362,"mtime_ns":1782650913000000000,"hash":"c6a142011870516822cf11cff16a86c56908f00680eb7c6219c8441c9b63632a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/payment.py":{"size":15715,"mtime_ns":1783745581000000000,"hash":"0d0b8823013a63f91baee0ea19b56f203e70fb1e450f873cfeb634a6cd017f54"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py":{"size":17764,"mtime_ns":1785473021311995564,"hash":"7bdd9f93c359800774b48c268d6ef56c6abcdc9ffbad3f50ddb71a88da506014"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/workflow.py":{"size":4984,"mtime_ns":1782650913000000000,"hash":"84285aab7499ce9280156c5814b2dc4fff42841803dd673cc6bfdc6eed498283"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm.py":{"size":151307,"mtime_ns":1785201644248461923,"hash":"c30d4eda6a95a713dd0598c5d4eb4163579510db58887ed8e74b489dcd6a4a7f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py":{"size":31345,"mtime_ns":1785561868368210946,"hash":"dc057afd76f6c9ed3a1c10951c95e0b8ef99626de340f30a80e77eac2376e858"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_sub_routes.py":{"size":25165,"mtime_ns":1782650354000000000,"hash":"b2733fd74cb7e6cbe6518fc5a5700e387601afc087be09f395f3c61372099847"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py":{"size":27371,"mtime_ns":1785561127931113865,"hash":"512afa955dbef686b1a320240d87767e3a7d0aaea2d3e495398a4165c7cfa4cd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/__init__.py":{"size":544,"mtime_ns":1782011200000000000,"hash":"822060230e155b8704feb447b908c226d4c53e62b3e6df65c89dc3c7a0e6e07f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/dashboard.py":{"size":6576,"mtime_ns":1782651340000000000,"hash":"753703fbbe8ddc02d8fbdae78df4abd1448f5ce5878e2f0390111360fdc300b3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/inventory.py":{"size":16423,"mtime_ns":1783156035000000000,"hash":"901602a8fe362aec9b89ac6f2ee578f1eeb105fcf12a1a6c3ff4ef98f4ad1ef3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/plans.py":{"size":17098,"mtime_ns":1783156035000000000,"hash":"bd2c8344e2ab765ceb2a2c91f5cf2facea319ae66c9097f5468a7f5d753b67dd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/public_inventory.py":{"size":6968,"mtime_ns":1782790898000000000,"hash":"79aa205d2e5e89ed45dd7b95068b93e3f6db82ee9258b0331b21d6c8ab551582"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/weighing.py":{"size":14940,"mtime_ns":1782687688000000000,"hash":"71d143eb05d0d3f785f5962892bde64dee3c2937139c975b52af62628f308d46"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/leave.py":{"size":6916,"mtime_ns":1782790854000000000,"hash":"6e03239433bbaecc54f72fa2aba2578573ae6c7fc881f287ef57dafed1a0f1b5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/menu.py":{"size":30932,"mtime_ns":1782790854000000000,"hash":"4e9de047e67ff365d17ac28d30e1baa72cfa3c651caa1b9776e225fc07da0e58"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/monitor.py":{"size":2789,"mtime_ns":1782790854000000000,"hash":"5c13164e49d7ecb6836cf8e65a705fccd518399b85d3be2318c9581a98bacd51"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/__init__.py":{"size":1401,"mtime_ns":1784428053000000000,"hash":"dea849a84ab13ec8daf7782c055f04682fb763bbfd2f184e37ace15312421905"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/base_data.py":{"size":32882,"mtime_ns":1784993134000000000,"hash":"1bfeff4b19b3e8020c12c31e337f4d5131170fdb3974bf3593f3bb77de10ddc1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/freight.py":{"size":10543,"mtime_ns":1783760751000000000,"hash":"2d64ca83553dbfc928887171941761114c5db012b9c4a01d34e2b522902bac38"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/inventory.py":{"size":13443,"mtime_ns":1785202430756770222,"hash":"b14a59968214a71d272cc6fbfc2555a9ea39eb8174697a75bec673bdfda1b074"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/io_order.py":{"size":12552,"mtime_ns":1785484571840900864,"hash":"c1508e2c882a86f5dc3982e2262762704a0c6ec3f15cbbca688e51ccefa6a4c4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/menu_badges.py":{"size":1203,"mtime_ns":1783257582000000000,"hash":"05dfdc446281abd9c3b273ebae2f9cbc4efe681fdc0ab288a77903e9e2bf83c7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/ocr.py":{"size":1889,"mtime_ns":1784035957000000000,"hash":"1de70651a8c1c9e0e208bdccb45d0b9c7e7a0f8f9a663941bdbd5ae278234b1a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/plan.py":{"size":53516,"mtime_ns":1785453587549056220,"hash":"129c2d09968a90f83cb86001cb3f95174a1b322857e3dc7e69b80d4fb9c93ed3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/public_io_order.py":{"size":6947,"mtime_ns":1785446228430209460,"hash":"74ac18f644a2fb5454714b0c26e4efb4f2838cbb579c3771ab3727b4ce7471ad"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/public_site.py":{"size":9607,"mtime_ns":1785451214459593031,"hash":"c9d7d58d5f52fbc38c57a35db878499e9007a23579ca4afcc1b23e9d89574f93"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/public_transport.py":{"size":14689,"mtime_ns":1785451206327142197,"hash":"93ae31a9c31bb9d67b9b5bdb62c367a18b497fe10a48508a5d1ef13f02b3ba2d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/transport.py":{"size":35018,"mtime_ns":1785447176422326611,"hash":"ef6de0a2d4639df270b33474966feb66b1366109bdf984062d0187b22189ed43"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/transport_address.py":{"size":6737,"mtime_ns":1784993134000000000,"hash":"e7cc69318bb266a6fb28a9e8163b16e459b879e6041b226d9870477d3bf1c378"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/vehicle_maintenance.py":{"size":7793,"mtime_ns":1782695447000000000,"hash":"79033735d527926ac082200de0b89a122c53db3cbdf5fb33e3cc69f74dd017f5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/vehicle_recharge.py":{"size":8824,"mtime_ns":1782693867000000000,"hash":"f084b6fb3e80de0455ee9cfcc857ae5814b79497786367380f3a375b16c4bf85"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/vehicle_urea.py":{"size":6696,"mtime_ns":1782696220000000000,"hash":"750ecae5cdcc857031e618b87ffa9b28607bd47e72ecf6dc7ebbe51003682df3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/public.py":{"size":12682,"mtime_ns":1783858998000000000,"hash":"b98ac3f3bc95c2b42c481ac9ae9137528e55845d425e5d2184827dc424304e42"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/workflow.py":{"size":21202,"mtime_ns":1782790854000000000,"hash":"3950dd8d9855f5ed33a0e15883f7e442c4e26bc51672209b1e68ce0d0c9ce399"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/__init__.py":{"size":61,"mtime_ns":1780108930000000000,"hash":"3dd1842ee59b0c804176b03b4b8a323bd4a252b7feb1bbc32db64f3a8928570e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/admin_request_json.py":{"size":2669,"mtime_ns":1780108930000000000,"hash":"4f68b3cf84291e7bddad6ecf4bb4d29ca5e1ec246a9f7f9c4cf5909d0ec1174a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/api_crypto.py":{"size":1870,"mtime_ns":1780108930000000000,"hash":"c04b748aea86890a5971f749523c7b17dbad1ddd6f9f7f07a5679d159c984e33"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py":{"size":10876,"mtime_ns":1782790001000000000,"hash":"b39f128b6612589ea6ac5babd30752e9585b3af07b82bb1ad53c9e3c0d90816f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py":{"size":11971,"mtime_ns":1782701669000000000,"hash":"0b84c32828939e6102bb3647691fa8f04b1f68e0e0e9f28127374cc44e19a11c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/attachment_biz.py":{"size":1122,"mtime_ns":1782219602000000000,"hash":"fb9fea8983524e3891357016b6546d982c4a82cb782fc01425f70472d4338b6b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/auth.py":{"size":7457,"mtime_ns":1782790841000000000,"hash":"34bac56e1c2cb6215f4b5fa2dc32d77d4b4abca51428819eebf4afd269cc51cf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/bx_auth.py":{"size":1473,"mtime_ns":1782650780000000000,"hash":"678d9ff99b5c89575ef47e5c9e61d495f364917fd6cfb2b322c4d5035d3ba359"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/config.py":{"size":7027,"mtime_ns":1784428051000000000,"hash":"4a79ef22b9d9c3ae5ce1a3a8227bfac549d1a318a4609927610ef8eacc0008e6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/context.py":{"size":421,"mtime_ns":1780108930000000000,"hash":"83a10aee67162374993c10a30bf8bb8bd9c4b35cf48f42c832415ccebd91660f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/data_scope.py":{"size":8432,"mtime_ns":1784993108000000000,"hash":"16fd3ff8a3dde7397d55829d83c8541f6cbfb11145bfa8f2ae4e28fcaf4e2f60"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/database.py":{"size":1510,"mtime_ns":1782790847000000000,"hash":"8bc9c8ae62e2be2c6920036582ba448dfcd1711c41cebb62274ff6bc6ee14b0b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/db_auth.py":{"size":2500,"mtime_ns":1782790853000000000,"hash":"4988b71d4e54b326c333872b34743914d67b15fb753c1b0231e9b00b366458a4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/db_collation.py":{"size":548,"mtime_ns":1780108930000000000,"hash":"0c680e25a18244ca839a7de6ed1f4313b33bc8da118d89c463aee1b6af00c6f9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/delete_guard.py":{"size":3572,"mtime_ns":1782687610000000000,"hash":"223d91c51a1677b6a4b7802d5571af14d5cda8bc45e4e757b1f2150990a69bce"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/exceptions.py":{"size":4946,"mtime_ns":1780108930000000000,"hash":"79c997d964bca1a4f12f2b92fb1f181fdb9e2b3cf72eae39f4cc164d23794fd7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/login_crypto.py":{"size":3858,"mtime_ns":1780108930000000000,"hash":"b82d51afabf2293a9cb1fb2e5f994c383948e7f47ea95fe674686b4f3f3342b1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/menu_guard.py":{"size":1611,"mtime_ns":1780108930000000000,"hash":"3e26077288c3620a4780038b891a326206b45bffe00aca545bdae30172487235"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/oper_log_context.py":{"size":868,"mtime_ns":1782699327000000000,"hash":"064c356f3f0fbabc454311445f02d375b965c2c055ddc51386d4dad50ac3337a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/oper_log_decorator.py":{"size":5312,"mtime_ns":1782701254000000000,"hash":"e476146985da29ad8cb77064d10314470546a8a52f6026a75fdbadd3fee34288"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/oper_log_infer.py":{"size":1767,"mtime_ns":1782699326000000000,"hash":"4346307abeb03020a7069f560556b9954cf50203efb6ac65b0a4b9644b6a9b2d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/order_status_compat.py":{"size":2828,"mtime_ns":1780108930000000000,"hash":"5349e5a0745ee6734c4a995337779307adefc46f453906171988a77de2081540"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/redis_client.py":{"size":1691,"mtime_ns":1782790834000000000,"hash":"e5d84d7433ce745da7a37fb46dff5d5eb6ae027ef0efbf406da0c9c7fb6089ad"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/request_payload.py":{"size":2842,"mtime_ns":1780108930000000000,"hash":"e9937151530ab1417ef297aef59111977725cf90be2a8fa76c00a0618789aba0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/response.py":{"size":1824,"mtime_ns":1780108930000000000,"hash":"f1739352d65ea8287d76e282a59553aa8d63c97e35764c64ac378aa5bd9c347e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/security.py":{"size":728,"mtime_ns":1780108930000000000,"hash":"df0f01115064f7b8de1c81dbe9a6db39360c236610b68c33b3234a51d7f0025b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py":{"size":14141,"mtime_ns":1782855136000000000,"hash":"3ae2c413c10898a8adb3d6773870bafbfbc18c739c10e0e8b4f765b4b5ca6c08"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/tenant_context.py":{"size":693,"mtime_ns":1780201410000000000,"hash":"0a810658d894d35b9e981faa1448e1d02d617ecbe563bd711f6ce5a8f9db1861"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/utils.py":{"size":1498,"mtime_ns":1780108930000000000,"hash":"09323693661c1d4560458b86a954128ccff82bbaf6522da0b44f24da99ddf9ea"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/wechat_message.py":{"size":11194,"mtime_ns":1780108930000000000,"hash":"5086070deb14d99d1a69e419b2299ec4ea2fe128de80fe321b0c3c531fea7a88"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/wechat_pay.py":{"size":23585,"mtime_ns":1780108930000000000,"hash":"3d52265ce65d21e7103f94afa1e8547aee0823b5ea6d65c50317436ac81fb4fc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/__init__.py":{"size":169,"mtime_ns":1780108930000000000,"hash":"340e3c08174d61829012879e684f6166803b88c819c58b54a16a11d210dea85e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/api_request_log.py":{"size":4562,"mtime_ns":1782699354000000000,"hash":"f233bde579c4f6c7f2fd6030878c5946fb5dd5e247efaf4fe80d3f48622c19a8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/base.py":{"size":5360,"mtime_ns":1780108930000000000,"hash":"49fdea023825ea249923b1cb02d353dcede1850158d3555a2082887925e69b9b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/biz_no_generator.py":{"size":2534,"mtime_ns":1780108930000000000,"hash":"e6bd375987e47f6ee80294686db64377938a286767bb28324f3eda2ad39ad546"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/__init__.py":{"size":0,"mtime_ns":1780201410000000000,"hash":"9b8fcaaabdc85883c9ef392b596b60db0bd3b2f1623fc8012e55003f234a9875"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/clue.py":{"size":25820,"mtime_ns":1783155705000000000,"hash":"3526af7e7e79d505911690355890ccdb3a1c30d302534ffdc8626a454cc2499b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/clue_follow.py":{"size":8493,"mtime_ns":1782687674000000000,"hash":"54881f876d1842ee4a344d049ea4b5bac18b243535338077cb3eb3ec8b60e9c1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/clue_statistics.py":{"size":11229,"mtime_ns":1782649305000000000,"hash":"fbc3b4f3356256787839cc5b2a6f8dff41dcf9eb27c791e427e816e3ba14e094"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contact.py":{"size":10482,"mtime_ns":1782687664000000000,"hash":"f4e3a684dd7a6c7c927e10e8e1e0c108c151b963777b85c5b74d7e7871f3a438"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract.py":{"size":91149,"mtime_ns":1785479747157279521,"hash":"2331b1347e35b0b2229f8ad2937ca2a01891c014cfb67e61f5fec170910c6cf7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract_approval.py":{"size":13958,"mtime_ns":1780763324000000000,"hash":"3d7fbbb90728568a2577e52d8986ccbec8f599d04a0ef9e330939d1fe729bc98"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract_product.py":{"size":13694,"mtime_ns":1785201816045624515,"hash":"065d84b86eae1b304ba84b48f5a77de89b4fef14fe714a61b31343c531887e1a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/customer.py":{"size":23825,"mtime_ns":1782687664000000000,"hash":"5d8934ae6318de87b0761686fe491a7ec2be02792a85d84308c383af3193fa8a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/customer_follow.py":{"size":8121,"mtime_ns":1782687665000000000,"hash":"ec67fc7667847017a8d8b5a276f5c75328bda7fa360746d80c7890de3f6d4b76"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/customer_pool.py":{"size":3725,"mtime_ns":1780202237000000000,"hash":"0f26ac2bcb585241f25302787184db4db422934e5d896ca25bbe7efaf61d92c4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/data_scope_helpers.py":{"size":3358,"mtime_ns":1782650085000000000,"hash":"b0aab03bc7b3afb2faf39410e9881b65e6a2eeecba592d1655b5b9359fb4dbdd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/invoice_info.py":{"size":7446,"mtime_ns":1782687666000000000,"hash":"e0f2069c43cd272e5f061d30b47a42140ac37aa26379985fc781f8a3851aa44d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/opportunity.py":{"size":42231,"mtime_ns":1782687666000000000,"hash":"75f54438002e070076fe37ec2211c5fd67bf4aebd2607ac94db15e30d6f634d8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_follow.py":{"size":10069,"mtime_ns":1783821986000000000,"hash":"06c9f3deab3472b20429c12a618ae2d4d6efd3afa2353ac44cd52651a596af4c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_product.py":{"size":10346,"mtime_ns":1782687669000000000,"hash":"40b497a41ce4003e128dc305abedc54e01dbaad8a8f7bc1ecec1662a3953a1ed"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/pool_rule.py":{"size":8816,"mtime_ns":1782687680000000000,"hash":"779f7f46e7ef8bfba27390d56fa071dfd3a8446d9d3b3361003b1c239f7169aa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/price_letter.py":{"size":13292,"mtime_ns":1784122560000000000,"hash":"1edbd17d41fcc4205faf15de5ce47aecc5459a39d06a920689379a65cdb9c3d9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/product.py":{"size":36160,"mtime_ns":1785201638941484735,"hash":"df41e8fcb843c01997f813fa5584efde9f118c607ef434e072f1b46ea1f231b6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote.py":{"size":48769,"mtime_ns":1784996795000000000,"hash":"dc5215156270917090fb404c6f7455b48617e9554305fdc4c66fe70f0befe423"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_approval.py":{"size":8816,"mtime_ns":1782650314000000000,"hash":"736353b8c2c5073d260e007a166234bd7d57958bcc738c56a1d39cfb22381180"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_product.py":{"size":13183,"mtime_ns":1785201813742913960,"hash":"20f79ad1a386d9f3d5192d154132b799380e754778f98cf5c940a782626fc8bd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_share_log.py":{"size":4277,"mtime_ns":1782650254000000000,"hash":"5bfbf7ce2918f9ecdbbca6fdce17d200cd52cdc71b2dfb44ac126a36ca0ed734"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/statistics.py":{"size":5642,"mtime_ns":1782649310000000000,"hash":"f954dc5479f42a52fdb3f05ad9076fdbe43e569bae85299fca6c8f37c7323cde"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/supplier_info.py":{"size":7182,"mtime_ns":1784996460000000000,"hash":"2c244898e16084f533aa42a0a3b45106a99515ebf627d37557b22549fd1f0035"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/dept.py":{"size":6593,"mtime_ns":1784993073000000000,"hash":"a636f1c45bd0dd0b2e6c337061f3d1ce4119b130d444d6b31bf7f1be4782fa67"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/dict_data.py":{"size":5379,"mtime_ns":1784993069000000000,"hash":"750a883eb752a96e26f22267171a941345201afa9d2ff243c4c4569d02a735ea"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/dict_type.py":{"size":5456,"mtime_ns":1784993071000000000,"hash":"d7f64d813e31ed3751b6399245ba502f953644569c75dce0a98598d38b0efde2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/ethnic.py":{"size":961,"mtime_ns":1784993074000000000,"hash":"ba2c043bc078010880031293f6e2f0f01e9b820d191ff6989bf65983903f063c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/leave.py":{"size":4765,"mtime_ns":1782687678000000000,"hash":"847095009bddac2d77dcbb485bcc57cbe168ff874989c197f49f2a28675d2525"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/menu.py":{"size":7600,"mtime_ns":1782688282000000000,"hash":"36951a77088782d80500bfa6266b46a564a670e10b70af7a28cdee8c50741098"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/monitor/__init__.py":{"size":1,"mtime_ns":1780242127000000000,"hash":"0592c62ce1172d93aca98cbd9aaa54b9c2668022abf3581249516472db312293"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/monitor/oper_log.py":{"size":6673,"mtime_ns":1782699352000000000,"hash":"0586702734f693ee099af38d407c71cc0a840153f93174699c5a5201e0a9acbe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/oss.py":{"size":2688,"mtime_ns":1785469127578334497,"hash":"88d704b7041a2ae458860c7a93357cff50bc5a8164939151326c22266f300487"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/post.py":{"size":5081,"mtime_ns":1784993075000000000,"hash":"12619e8ae3e341e757e8696459241924d761161a629b2804d0e1c3611b4d6a67"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/role.py":{"size":9417,"mtime_ns":1782688282000000000,"hash":"008550fe8efce5310afd3d41d944cee4b68d71763a587583f8832855480477f7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/sample_code.py":{"size":12322,"mtime_ns":1780114002000000000,"hash":"5b74838b3920f9182d092f8a1b721697f1a62e8b90728b9f54101dbb96baa40e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/site.py":{"size":6442,"mtime_ns":1784993075000000000,"hash":"a5f9e5ab9008186c0001c480bd702e6217946eedc17b2e35eb25ad06edcfccca"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/tenant.py":{"size":5659,"mtime_ns":1782688281000000000,"hash":"0192db8ac9c3de42fe8ee58324c77111e152bf4c35fd15c0b16467fe243712f0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/user.py":{"size":14214,"mtime_ns":1783851628000000000,"hash":"aeac623e3020fee4cdd01e463ced23e4e03539a17c5b57dcbd9d88aac5a4fb4f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/workflow.py":{"size":25052,"mtime_ns":1782688290000000000,"hash":"6ca7e3b79e91356a050592b768d7a6749e1bfdb2841a208c7235899603368aec"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/main.py":{"size":6588,"mtime_ns":1784428054000000000,"hash":"5fb1824a47d8362c5b98661559be23282c31c1b3dbedc4a89da42df6ec610b1f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/__init__.py":{"size":2508,"mtime_ns":1785445893850945734,"hash":"c6482a76c0273e7916ac15991de22851a53c3c20cfa922a6431e26cbdc4164aa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/base.py":{"size":2090,"mtime_ns":1780108930000000000,"hash":"fda71bbe87dcb29c6f0ffa9337e9f39c2c06d912df6cb75d521f0e87c7c73c6d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/bx_models.py":{"size":22196,"mtime_ns":1785472986385441979,"hash":"7027faa05ebc02388df5ac563561a826f3b107a9c55d927da60cf4ef85327d9e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/crm_models.py":{"size":71968,"mtime_ns":1785561859218571928,"hash":"d78d1ed8e2b0a0b4bc3bad72c962836de29ea0c16054069859517eb4ca910f18"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/db_models.py":{"size":8110,"mtime_ns":1782219570000000000,"hash":"249bb0971c263436095a6324457557b6ac5cfc3ca5ac9bc9499a9b4cd21d42bf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/models.py":{"size":36012,"mtime_ns":1782699345000000000,"hash":"01f974f182660ec4f215bcacc31eddadd7899d60d95aa19a61046579a994512a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/pl_models.py":{"size":77415,"mtime_ns":1785445911238805668,"hash":"723076b8d3f0c040c205fd161b87bc2d3457b2322452ce8b2547ad24ed7e645d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/__init__.py":{"size":1159,"mtime_ns":1780112973000000000,"hash":"4e8b0bda6680e2c8740c380b96eedb859ddc584a81bad568a18ba6beb001e480"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/attachment.py":{"size":328,"mtime_ns":1780108930000000000,"hash":"300b74c51c66cb0fbf8c9f4d84a4b7bf29dcc9b6a67d922f8e1d0df05f9fc5bf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/auth.py":{"size":1315,"mtime_ns":1780108930000000000,"hash":"018b82e42bbb055250549c54ba700ee01cf28cd753397d6c162f9e60185908e5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/__init__.py":{"size":81,"mtime_ns":1780750556000000000,"hash":"07c3422f745afbff1c8162b3782fbb4b8de65084e7e9bbcf45abb9d433d65f98"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/advance.py":{"size":4603,"mtime_ns":1782688296000000000,"hash":"74b6e8bf6906518f80f16f218f1af74d2c356a6f392a4e8a69466f4179ce0b92"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/attachment.py":{"size":525,"mtime_ns":1780750871000000000,"hash":"f287214c72345e41d9d122ca55b4d3e279635d99cbf10ed530de0ac32374f31c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/common.py":{"size":1547,"mtime_ns":1782003187000000000,"hash":"a75ca6a0d92f93408eee00cc5053206d28a545512e4cd0f186be9e00e3346ab1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/expense_item.py":{"size":1668,"mtime_ns":1782688293000000000,"hash":"ac07c7b05fe990e743dd5b4e96a85b59431479ca11b98cce7c340a93dbe99ce1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/reimburse.py":{"size":7641,"mtime_ns":1785473904076010280,"hash":"9e3bd83e926020fbcdc81264afa766f63a27d71d7c71e772d581b5d4019d82ac"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/workflow.py":{"size":1677,"mtime_ns":1782688293000000000,"hash":"f683e5bb7a45d0bae3b3f262c201453155eaaaf2c8d7f14f567a14295a68d2e1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/common.py":{"size":555,"mtime_ns":1780108930000000000,"hash":"caa0c03398e54017b25cca2a16cf8d232a59739893a16e4c33b51a5316d8964f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/__init__.py":{"size":0,"mtime_ns":1780201410000000000,"hash":"a6d57250b43cbdecb56b7a9d55d29642b808be368733e14b7df2bd196f54d64d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/clue.py":{"size":9417,"mtime_ns":1780215022000000000,"hash":"2676afaecac4bb6da185674a9421dfbd40834ca21520adf66bb6b175fb728677"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/contact.py":{"size":4856,"mtime_ns":1780742840000000000,"hash":"60c714cc254d70f39b43205bbcb7fb4c563e807ddd070eefaaa952ae96048377"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/contract.py":{"size":10671,"mtime_ns":1785418059662177093,"hash":"be3c4f394aa2ee009515127647c54bad54936d9f6c1ecd36e391efae192b6960"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/customer.py":{"size":13811,"mtime_ns":1783823672000000000,"hash":"b91167282158aeb11046dccc4bf2f29a13307a0413b3d7b3c860b17d37f8ad4a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/customer_follow.py":{"size":3716,"mtime_ns":1780201410000000000,"hash":"3979cecd62a4f2ee5dd925639572208e36b397620d91a9ce49a59adfcb2a9d55"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/customer_pool.py":{"size":1340,"mtime_ns":1780202198000000000,"hash":"7a6b76e0e39ada0783dfbee92280e9f06299b6662b08abb13ab1b0d9c70fe370"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/invoice_info.py":{"size":3104,"mtime_ns":1780406386000000000,"hash":"a59df3aed2c976904e3b5325fedd1621435b322645aa71349f3356e0cdc17424"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/opportunity.py":{"size":9391,"mtime_ns":1780242127000000000,"hash":"2e068961824a1d3ec0da0a94a3c494b63582b3251e5f4e030ce3e12897e85002"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/pool_rule.py":{"size":1848,"mtime_ns":1780202212000000000,"hash":"b0331e17e801d206fba2fa89df1a66d1758d850dc5547e076218e16c8211a3e8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/price_letter.py":{"size":3994,"mtime_ns":1784122554000000000,"hash":"6cd75fdbbd6a2dc65cf0b0b29e6206910fbd86f8bedf05bb56a8835130b81829"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/product.py":{"size":9514,"mtime_ns":1785201684922273556,"hash":"f4b9b55d1a4e43b9d09c2193095223a922b97224baa660817c8b5fc5647985f6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/quote.py":{"size":6173,"mtime_ns":1785418147320158849,"hash":"36361e9100bbaea5768c3428c2adca7a5393e51915400fdc71e9a6b4a2ad9c9f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/statistics.py":{"size":412,"mtime_ns":1780201410000000000,"hash":"fb1957d0fe87f22c37ba5bdaa5f3bf2bb4a40685a21a05dce98326581bb4844b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/supplier_info.py":{"size":4149,"mtime_ns":1784996454000000000,"hash":"25bc81362d6365c8bd852892890f3ff0c74fd702016cb21104c3bdfa51e2f858"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/__init__.py":{"size":84,"mtime_ns":1780804619000000000,"hash":"5193d61f7204f825551f083e79722805fb2abfd953bb552e80950bb3ff9784a1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/dashboard.py":{"size":514,"mtime_ns":1780804990000000000,"hash":"f2c1b1014d0d769abf32dab3783de65fe7fe327c956ffbfe44adce94542f8892"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/inventory.py":{"size":3948,"mtime_ns":1782219604000000000,"hash":"19ea80e59a1309518ad6183a6b0b8751401f4724d7b5101d47defc2417ec36c8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/plans.py":{"size":4876,"mtime_ns":1780935329000000000,"hash":"474cb68905249cd5a6237443a412d49cb28af2e0cec61c9bf5c34ec54db1240a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/public_inventory.py":{"size":1492,"mtime_ns":1783211660000000000,"hash":"ed4e21307ac463410d296a2f8cf53f8e0429187344537bcf1e1212a7affa06a6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/weighing.py":{"size":5347,"mtime_ns":1780935341000000000,"hash":"f734c66269b713a840d7ce6c1c6150bd2dc00b114b09963362202d119c82301e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/leave.py":{"size":1449,"mtime_ns":1780108930000000000,"hash":"c54098a69bd4490290dd8d7809ed8764a3f38e8c38692eeef2b505293cdfaeb8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/menu.py":{"size":816,"mtime_ns":1780108930000000000,"hash":"17e35f2d7bf95cac00d81357f69fdcbe849e855daa05570c3302de8182b4df11"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/monitor/__init__.py":{"size":1,"mtime_ns":1780242127000000000,"hash":"bb5b318d3cb224c50a2e0286e145f89ea7278437437fd17d7c865d67ad148076"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/monitor/operlog.py":{"size":1069,"mtime_ns":1782699353000000000,"hash":"b9f0a382f8990f69391b26bb75b4538d141d6adadc4260fecaa8b33cb44c063d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/__init__.py":{"size":5012,"mtime_ns":1783242582000000000,"hash":"1dced39f250919efc4aa798daee1efef3adcca054c7483843536c455919ff106"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/base_data.py":{"size":17829,"mtime_ns":1784957273000000000,"hash":"3d51d0a0f2f54dc44f2f987171b9f84439be3c07cfd044c2ebe5c87f41b977b2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/datetime_parse.py":{"size":929,"mtime_ns":1782905360000000000,"hash":"7a4eac85768cbeb0ba76f7f478ddadeeacab2498cd9be4070a76e1cfad693cdf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/freight.py":{"size":11299,"mtime_ns":1785439224271183303,"hash":"ba898caafbe6c8f4c5729c2521917eeaf92fa3c649626232d326eb255f0c177f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/inventory.py":{"size":8319,"mtime_ns":1785202429973819450,"hash":"63ec5922aa1e9bdf8c3b7dfc5b0ccb555535cbf949e32a1055237ba86faaa146"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/io_order.py":{"size":5908,"mtime_ns":1785450376207250209,"hash":"eb0ebe1400d6d0f7fd614561986c6f5d2072946e459c90b06761f0754a0a482b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/menu_badge.py":{"size":247,"mtime_ns":1783257567000000000,"hash":"88c31e5ef8cee73327a1a0f36ea7ae0e61fa8f1ae140ad95ed0c0b9c2b4d05f7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/plan.py":{"size":23874,"mtime_ns":1785453577889781284,"hash":"346dd41170ff374014149c5b4e0f442e58040200b17dc69b20d05f18fe235a59"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/resource_snapshot.py":{"size":3823,"mtime_ns":1782793446000000000,"hash":"2d65c990d058d22010f8d4449652eb752c297a046b5d7b3ff6755c3e1cad0cf3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/transport.py":{"size":20802,"mtime_ns":1785451180420705219,"hash":"ae069b93e5dca487543132014dab26c9a57ab6c714c3613d3e8527b589fff282"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/transport_address.py":{"size":2604,"mtime_ns":1782906539000000000,"hash":"6548b4b0c8c1d8096ce96ff1d5b523c67b12300f9a3eac66570b0256478a1120"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_maintenance.py":{"size":6563,"mtime_ns":1782695447000000000,"hash":"c34b79f5bcd004c0f6353922492883e4b08e5a6bc229f0265c9af850d235848b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_recharge.py":{"size":6299,"mtime_ns":1782694169000000000,"hash":"4d5ab880c0c3ca91b485e1ba53725005b9f89fe205780d58a738c861dbb7e6f8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_urea.py":{"size":5609,"mtime_ns":1782696196000000000,"hash":"71b7de2f90b3c7c732b59683e5cd4d858288121414a1ff2679c039299f5fb024"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/user.py":{"size":1911,"mtime_ns":1780108930000000000,"hash":"3d3c159018cab6ed1cd3de7034ffb1fe77a272b9099901a1882d07aa15fc90a0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/workflow.py":{"size":3949,"mtime_ns":1780108930000000000,"hash":"e5aed7afcf903c838a35cdaf2230a93d221c63f5c6baa1497e455afac8587a9a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/__init__.py":{"size":34,"mtime_ns":1780750594000000000,"hash":"583b12a6d2c9fd4411b652741e73324df9256138946ee873a0ed03169f8dae2a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/advance.py":{"size":24037,"mtime_ns":1783746967000000000,"hash":"4834348d099b32b70d14e1b56279dbb385f42519646351d8cb220da8c5fe27f1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/approval_cycle.py":{"size":1296,"mtime_ns":1780758200000000000,"hash":"308c087d94ac253bfc7e2d5455a06ae8ceac034adda41b5c61dd315dc167efaf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/attachment.py":{"size":4582,"mtime_ns":1782650868000000000,"hash":"3a6480cd051bd1af733a67e5babcd64f3f74cbe230d72364b599cde8b0c67a5f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/base.py":{"size":3984,"mtime_ns":1784993089000000000,"hash":"dd56d9197b4cddc60570bf5eb1851d4a426ab226858beb95bccb33a839471ea5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/expense_item.py":{"size":4639,"mtime_ns":1784993106000000000,"hash":"2640940d1851d60e7ba515d759a0aa06843b764742ae1ea2fabb95b6a16136f9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py":{"size":50167,"mtime_ns":1785473904076135989,"hash":"62aa40e704008af56df7fd19b786de94d291218976106b1c59ee2b2332639b5b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py":{"size":3656,"mtime_ns":1780750869000000000,"hash":"ac98980bd5b6cbab6a9394b6debc678b050cf4df969eccbc5f2d419b615937cd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/workflow.py":{"size":5617,"mtime_ns":1784993093000000000,"hash":"514ea42e366fff44f1becbde6b5bfa219a224517e47dcdec25c8cf803a3ec0b5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx_data_scope.py":{"size":2394,"mtime_ns":1782650938000000000,"hash":"1e8e1dbdcf4bc68c2e30b99015e930bb9522bd1f633e95604ec6a62bdb2b43f3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_quote_pdf.py":{"size":9877,"mtime_ns":1780242127000000000,"hash":"fec04892fccccc3601fbeb012c92c77110496910be44102de40b4610148fa58a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/__init__.py":{"size":0,"mtime_ns":1780805614000000000,"hash":"2cb780fb722e6dbf2ecea6f6fc19345fb453e1a3c40694ba0ff7465eb7cf7d33"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/auto_generate_plans.py":{"size":4699,"mtime_ns":1780935400000000000,"hash":"d0760cb8155d60e18040bcf6fe41e6964640a3dffd6f4b7bb68678c9f31ab29a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/inventory_id.py":{"size":2574,"mtime_ns":1780934632000000000,"hash":"c5269cbb273d987c296143b83f1287762ce67d7ddeccfb0a72bc70234bad9f12"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/mappers.py":{"size":6955,"mtime_ns":1782219619000000000,"hash":"b9e97f66a0a248d06c2f960c3f5ac4fb3369cc976c16709227dee0cc1513d221"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/plan_helpers.py":{"size":386,"mtime_ns":1780805092000000000,"hash":"5c6ec7612b204e1dcb65c5daf03fa7f8ffa7710cd1ace63be4f7ca00cbf318b8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/product_helpers.py":{"size":2106,"mtime_ns":1780935268000000000,"hash":"cea6b0697eb64081a79d18ab95f0f0477714505a7aef82a41672197b15fc8b14"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/weighing_logic.py":{"size":4110,"mtime_ns":1780804818000000000,"hash":"468ded88a0a4a397a96884580c88c59291c0b6effa897f08f1b3fea7857f9191"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db_data_scope.py":{"size":796,"mtime_ns":1782651142000000000,"hash":"ad4e206ae53e25247ebb004e0ef586077a6e7df0eac7b14973c26b186cffb2eb"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_carrier_service.py":{"size":1735,"mtime_ns":1784957286000000000,"hash":"7ab4f5c5a28b0af2c8ddfc91bbc425a9fc5246956afdfd29ae4ca0af32d73cb6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_cert_required_service.py":{"size":10601,"mtime_ns":1784947515000000000,"hash":"a98e229da05d7245b06701f3a166dd30f15a28d117b4389ecb8f03bb6d9d0851"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_cert_service.py":{"size":7694,"mtime_ns":1783849439000000000,"hash":"7bb0a6d4dfdb1ec11e72e971873791b8e188939e7c6b7328a0a2f4f8986c9d1c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_data_scope.py":{"size":801,"mtime_ns":1782650506000000000,"hash":"0f0275c56a43603e69a030dd1d284cfc7982a7636423cfff6d0e692eb4631cb1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_dibang_bridge_service.py":{"size":15310,"mtime_ns":1783777749000000000,"hash":"c506eb84c104ce63b98cde5b16644f16ddcf4e3aa335089bedcb4c267d21fc0d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_freight_settlement_service.py":{"size":47560,"mtime_ns":1783213204000000000,"hash":"53a61d4da0cd2e2d0bac74abcca13de3f3d506b603453811d8f1cd53fa50b358"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_inventory_link_read.py":{"size":782,"mtime_ns":1782225276000000000,"hash":"6471dfc9a1fbe66223f79490a5827b2422e5ca6932305ccde6aef4b641676a6b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_io_order_service.py":{"size":31821,"mtime_ns":1785452761834196393,"hash":"b98fd44f3f42b76ef8ec0797f6842c68f8ccee56368969f5152d86ccafa69167"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_menu_badge_service.py":{"size":6108,"mtime_ns":1783258109000000000,"hash":"aec342e2370f584c5ed0024bb08a8346c70e1827c09ab456b4b06e9dfc817d8c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_ocr_service.py":{"size":11166,"mtime_ns":1784036700000000000,"hash":"6f233150e253813a7c9da30e6e5d6046fdea01baa67c2589a332fe511ab795f9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_personnel_service.py":{"size":6707,"mtime_ns":1783845044000000000,"hash":"34f3d1d723890e294aac765a66d7e86ca87f4288f42cec674bb9151de091fe22"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_plan_service.py":{"size":43616,"mtime_ns":1785447059067456413,"hash":"68481c4cfc56bb9b948f45a84f6ab7e467b0a00199f32bfd388dcd4c0d9eb3fc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_site_link_read.py":{"size":2362,"mtime_ns":1782225460000000000,"hash":"3b9e1b93d3c4375b6b3adb4476ceb0df356654089d994aef4fea7e4f29266c06"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_transport_resource_snapshot_service.py":{"size":4861,"mtime_ns":1782793450000000000,"hash":"6f94dcb582fe725738a54469e461aa0124b9754b2141cb78d3859ff1a2f25ca9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_transport_site_service.py":{"size":3701,"mtime_ns":1782225248000000000,"hash":"07585f13aaad965c106e88ac26f5f8c58852c0c2bb0bdb91820185133d799219"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_vehicle_maintenance_service.py":{"size":23307,"mtime_ns":1783761151000000000,"hash":"0c7aa346d9879347d6a98c435fadc47873907ca0774147b69acf0d392e00e58b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_vehicle_recharge_service.py":{"size":22641,"mtime_ns":1783760938000000000,"hash":"a4a9377a8243e30dd7d6a8a175c68525009465fdebdeb01230849156dd8b59f4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_vehicle_urea_service.py":{"size":19556,"mtime_ns":1782696213000000000,"hash":"03d389e791e5fac9a5339d1259d342952fced97712c3657e8f791426de32743b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/web_auth_roles.py":{"size":5592,"mtime_ns":1783858473000000000,"hash":"04c2cd67a7ec8190aa7a9db717a722cd347a52279ac3ef5bd284777f0698a904"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/workflow_callback.py":{"size":3584,"mtime_ns":1780108930000000000,"hash":"a033c13c7bee7f4b636198c1efa47f2abba0d890657e52b0b7057568d4d83a52"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/workflow_engine.py":{"size":14042,"mtime_ns":1780113992000000000,"hash":"5c06a59c734f598d5c7ebe95d30f048ba3a97302b938bc9320d97e5a053c7aef"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/__init__.py":{"size":2207,"mtime_ns":1783208067000000000,"hash":"313e6da0e91d743ce891dd283458c79b50b24c4d909dc96ca7b3fd9d2bfa5013"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/customer_pool.py":{"size":9646,"mtime_ns":1780202350000000000,"hash":"4f0ab87e7a12534011b69f58079ca206d5443eee594849ab4aae728bb847de0d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/db_auto_plan.py":{"size":949,"mtime_ns":1780805095000000000,"hash":"9f7513cd2e74f9ddfe5cbee4ae58a40ee7a58aaaff051d590b19a6e1b08bb46a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/pl_cert_expiry.py":{"size":711,"mtime_ns":1783208067000000000,"hash":"7c02dbf83fad89c7da757965b545bf77f37792edd0d01d3ed320349b0b60a50b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/__init__.py":{"size":0,"mtime_ns":1780242127000000000,"hash":"a66deceefc987198863f61b8aa1b5715483a69c4a15ef47cd5586c5d8e429b97"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py":{"size":4679,"mtime_ns":1782003396000000000,"hash":"bc3f798cfbc359e0327d72e3c0513fe9cbaee196d0d85bcf6567cf5df4211d97"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_date_range.py":{"size":2363,"mtime_ns":1783745556000000000,"hash":"e8b487a9bb4072356cae7b1b38496c441f9a1534d6807798448e6de97073d669"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/crm_export_columns.py":{"size":9594,"mtime_ns":1780743830000000000,"hash":"b20594507aab09cebc3d540acad04547bf780cac9c885187138f5d64718ed513"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/excel_export.py":{"size":4411,"mtime_ns":1780242127000000000,"hash":"7fbde3fca845e4705487e7f801caee308bcc0c99a9da7d0c99681a96eaaf6076"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/ws/__init__.py":{"size":26,"mtime_ns":1780108930000000000,"hash":"d4357444e9b5b0a8593000fb6e4dc37469ebe008e675bf42ec0d55d463f88fc6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/apply_pl_data_scope.py":{"size":10945,"mtime_ns":1782650517000000000,"hash":"928fe2112c9fd8bab4da7f4fc67d6d247c78187ca3b1a4146cc2fd3d9e04697f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/check_pl_json_aliases.py":{"size":2918,"mtime_ns":1781880510000000000,"hash":"b04c5636779ecbcb3082eabdbf42db846cc31f7376129845820c6a4c1e829104"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/compare_dict_snapshots.py":{"size":11072,"mtime_ns":1783860128000000000,"hash":"cfc98cc72c5e387317cfa0a7670c47067fffe8f2e540d5cd580ee459e173e4ef"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/generate_dict_reimport_sql.py":{"size":10692,"mtime_ns":1780201410000000000,"hash":"a4faaf61f246dad04ec3933083ab4348e5d2987ae1ed34b1f6d8f19535642a05"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_bx_data.py":{"size":32783,"mtime_ns":1785455807105877935,"hash":"16751fcd542e209535216a0516d78b62eecb81732d7fe0f9ec051fdf811e93b6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_bx_menu_names.sql":{"size":454,"mtime_ns":1783254856000000000,"hash":"d40ab4c556ab285498f4689c21736832deddc754a9a2b7d806e870ccb39fc9ae"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_clue.py":{"size":18423,"mtime_ns":1785455807106788561,"hash":"72b84e497176bc63264c26d891c591c839f9dd9788988043c5752413c1b62a09"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_contract.py":{"size":36352,"mtime_ns":1785469153230627041,"hash":"b78319ae19a0089684e1ffe1993a1b62be2d687ab65a3e69da423247e0d4d4d0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_customer.py":{"size":25235,"mtime_ns":1785455807108557895,"hash":"f30d5a50a28a1130325a9d9db88586bcae9e2a39434f077ded25f847af2ed66f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_opportunity.py":{"size":23720,"mtime_ns":1785455807109188438,"hash":"f98964806f32c3020bdd7d644d930760d6ea3ad5162d5f1d6125494263dd5598"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_payment_invoice.py":{"size":13601,"mtime_ns":1785455807109946855,"hash":"c4af77164dac9ba4195c3d239c9679ea367b92f5f7500139f3b59547525af24e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_product.py":{"size":14973,"mtime_ns":1785457303643810528,"hash":"83b693cbc1a590f7a3cd6af2387e638f28474c230fc6f4c0a2813f343d35d887"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_product_category.py":{"size":16785,"mtime_ns":1785462269008382807,"hash":"35d9a064be6f0ac00b6b2162d77d710a2c4f108824eb78425de2341d576cf7fa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_quote.py":{"size":27580,"mtime_ns":1785455807110995231,"hash":"4ac389eb6cb7437d4f5e8203d9908efec9836046ce8628a5e4be1f8b8ddd52cd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_sys_oss.py":{"size":23401,"mtime_ns":1785468795797340265,"hash":"f2d9da1743e3997bf7361d39ff66eab588d7dd55d2114dc9cf6796f4f697a9c3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_dibang_data.py":{"size":20215,"mtime_ns":1785455807112164732,"hash":"28a49a423a784e70bec424b702f3d58f69b6f847153c061414efdcdabb660d0e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_doc_reminder_menu_group.sql":{"size":1562,"mtime_ns":1783256051000000000,"hash":"82a0ce8c5293f5051967633c1c2e0a1dc60e1fc7c97919c9e0866246bbcbe3d1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_menu_groups.sql":{"size":6367,"mtime_ns":1783256049000000000,"hash":"5f6964d1ea2712d3d72c8f43f08c16597d85fe79f3f54c8be99962090d6c2b67"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_delivery_slip_template.sql":{"size":217,"mtime_ns":1783231586000000000,"hash":"e05e3fe7255e6c8a88aceb1aa53d743a4888a34c9fbaa4449c1cb8a275744d68"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_product_legal_use_cert_url.sql":{"size":1180,"mtime_ns":1783253793000000000,"hash":"01105ec581050477087d9bf65528cfe77ce0026d0fb682cba8014c4cdb046db7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_slip_template.sql":{"size":191,"mtime_ns":1783219958000000000,"hash":"e2a17c3df7be5cc0436ef979a48de81eecbe99c03f43662f4b0954a09dfa1305"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no.sql":{"size":203,"mtime_ns":1783240340000000000,"hash":"de9b3c8e1617b9c345b2d4005e4a627f10ded089db89d35f0b389b333b840c08"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no_format.sql":{"size":571,"mtime_ns":1783241697000000000,"hash":"61fc58ebda64c5d6be6bfd374dda99c7134e38dc89031527f71916625c4e36db"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_template.sql":{"size":215,"mtime_ns":1783238744000000000,"hash":"24cf12e21f9f61f49c38e654c0ca655f56a21e5e2364e4c2ca4547dad583272e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_users.py":{"size":28602,"mtime_ns":1785455807113727900,"hash":"f5626fd3ca8bbc16275862080365c3ea2a27fd0f608e2243a284493762a8f735"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration/minio_url.py":{"size":4770,"mtime_ns":1785465354405875664,"hash":"54a1bf95512c0a8b5feeb518ea3af76983bb1b0a3ba645898b07debdb2cc52e9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260711_hide_vehicle_urea_menus.sql":{"size":269,"mtime_ns":1783760394000000000,"hash":"a5f66647cdb4f0f403689b47b804f8099d7d710753823ef3ddc5e7a5a9ca4ca8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_add_finance_dept.sql":{"size":1697,"mtime_ns":1783855927000000000,"hash":"4ce457089ead5c063ae8e1a6d6553416deb43c54a7edddb574ee2572390aba99"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_affiliation.sql":{"size":753,"mtime_ns":1783845019000000000,"hash":"6d450d264921f43c4e74ee4a2bcfc8335d16f77d9e0413267389741a92bf4eb5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_type.sql":{"size":1662,"mtime_ns":1783843576000000000,"hash":"24fcd156f97e2bdf2bd158beb5358fe7159874783a84716c6c18d2565cc8ac1a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_reset_sys_dept.sql":{"size":4517,"mtime_ns":1783855538000000000,"hash":"3795d6127a4dcf55d406be0fe673b8a83655723fe1f07b855e6fe45823d489fa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260713_pl_personnel_cert_split.sql":{"size":3436,"mtime_ns":1783946793000000000,"hash":"ce61899ec7e13f41de08dbc923dd1ff2a1a976603d13c8f09aa6fd5be9c914a2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260714_pl_ocr_usage_month.sql":{"size":1270,"mtime_ns":1784032423000000000,"hash":"d7018a4e5be9760846731440be98e53584d8e1461fc4ea54a0c8db61c666e7fe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter.sql":{"size":11104,"mtime_ns":1784122573000000000,"hash":"548dab479fcde4bf1628ca2093fd7840720473a774a5289b55bfd4f46b902153"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter_bill_price.sql":{"size":901,"mtime_ns":1784122547000000000,"hash":"11a4eb6f3b4d89c1a5141bd9a85e931517984b77ac213f5842dc590f928fe1cf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260719_pl_inbound_outbound_order.sql":{"size":10843,"mtime_ns":1784427911426172052,"hash":"baab6333d8e0865e72a9c474eb642bd5b166f9d70a6db5825d315574f66df069"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/patch_pr3_api.py":{"size":14409,"mtime_ns":1782650231000000000,"hash":"fb4cf4178a4b7c5530999f0c950ed38310dfe81b3168c10117849d6f512be01d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/patch_pr3_api_calls.py":{"size":3345,"mtime_ns":1782650279000000000,"hash":"57732d0beb80ee17b533c78ce0250967fa83c68354ea9d1972275ba1fbc39007"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/patch_pr3_quote_contract.py":{"size":12491,"mtime_ns":1782650163000000000,"hash":"eb6b944df35fda5edb6675b69b00f5a83a75fd78785251d1e81e1788ed439cfe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/refresh_business_role_menus.py":{"size":3812,"mtime_ns":1783858483000000000,"hash":"b2c76109936791e1f624e239b24832237fa0256b38b98578e39825ac215fb166"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/renumber_crm_product_no.py":{"size":9071,"mtime_ns":1785455807114125233,"hash":"320c63801100ea8e9fb62abfb44b3487139377e293310593a877ab2d06e9d2e3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/run_db_auto_generate_plans.py":{"size":1043,"mtime_ns":1780805102000000000,"hash":"3cd8f15b677f21b2873ff384fc0581da264a53ee4318da3c8262101156e3225b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/seed_sys_menu.sql":{"size":82807,"mtime_ns":1784948075068625581,"hash":"b712bc6d4b5a248a26706137f601e26d81bdb7ffdae016ff818a77155afe15a8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/setup_business_roles.py":{"size":14256,"mtime_ns":1783858477000000000,"hash":"ac12df2cf75826931c85f4deb3ae28614e31ea825d0beb3cf351a8d4f5cb1071"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/test_aliyun_driving_license_ocr.py":{"size":5130,"mtime_ns":1784032210000000000,"hash":"13d43c9144c3795b8870fbd900ed14f97ae22ee043e2c265a5151525666abebe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/verify_web_menu_codes.py":{"size":2535,"mtime_ns":1783858485000000000,"hash":"16c9c072b5b80fb309d56823963ebd0dd1f437a3f74d7f82711dd8a7c2de86d2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/start-prod.sh":{"size":7357,"mtime_ns":1782639355000000000,"hash":"ca89869446be74a2bf2367b3b28f448580220859a39a84ad9613ac5fe35a8433"},"/Users/wuzilong/work/00code/shanxia2.0/backend/start.sh":{"size":9548,"mtime_ns":1780114661000000000,"hash":"4d632863e8a0cd81194b491d83a0218a4157435ae812dec76a6f6197b4d48e57"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_data_scope.py":{"size":4660,"mtime_ns":1782649048000000000,"hash":"9545dc65fac7e13bf07ece2ec828ec5957bb115e23d0ac8c996f9c70362a4ecd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_db_inventory_id.py":{"size":586,"mtime_ns":1780934647000000000,"hash":"71a9617d5d0f2c23416686eded204b4c941b47afc3fd6e3facf0c75401e883d9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_delete_guard.py":{"size":1565,"mtime_ns":1782687611000000000,"hash":"5e2a45f63b7296e3a10dfbd4b4716e54370e1439248881d6591cba5c9f6581d6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_dibang_plan_quantity.py":{"size":4258,"mtime_ns":1783777759000000000,"hash":"6af8eb3c1f6c7ad34cd62f1e82e9c6b96737ffd48ba74dda7c5f888c55dd11cd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_personnel_cert_required.py":{"size":2829,"mtime_ns":1783946968000000000,"hash":"e89b3aa798794dc77085af5c4b880cdddcd2c0590c3cc3414f8a5389fd5f6d93"},"/Users/wuzilong/work/00code/shanxia2.0/backend/venv.bak.broken/bin/Activate.ps1":{"size":8593,"mtime_ns":1780108930000000000,"hash":"ed2ea10761f2798e8980084d754284d3fcb94f1284ae7085c35c16108fe24846"},"/Users/wuzilong/work/00code/shanxia2.0/backend/DEPLOY.md":{"size":2574,"mtime_ns":1782639356000000000,"hash":"6989c30ab5c99ebf488137e31e5561b4a00d36060716dfad3fc247b673538818"},"/Users/wuzilong/work/00code/shanxia2.0/backend/README.md":{"size":2752,"mtime_ns":1780114581000000000,"hash":"f5def8d25af0556a443c31a73e81f958883b60cfed8b31fac457f2832c2b6d58"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_io_order_enrichment.py":{"size":2097,"mtime_ns":1784450322000000000,"hash":"0f0fba3a24b2eeda1af4c30180306eca8da5f3dd1807f2e7591f4c46548440c4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_io_order_site_feedback_status.py":{"size":3527,"mtime_ns":1785446258255101137,"hash":"fc53fd735e09b39e7cfe085ca6756f87396b6954f7057fde2bfca39524c34276"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_tripartite_cert_gates.py":{"size":2003,"mtime_ns":1784947499000000000,"hash":"312091d1017c2f22195a9317cd6f39c880cd5aa6b27acaf343181319f045ffee"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_carrier_eligible.py":{"size":689,"mtime_ns":1784947707000000000,"hash":"a3093ae31166d40d7836abb3575c0d4d50ff9e9bf23fee8e7a291afdec39fedd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/paste_recognize.py":{"size":1845,"mtime_ns":1784955105000000000,"hash":"2a1d015e85b6d9e25d54d94940627a713f4c6e7422dff350c20c4036176d11dc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_paste_recognize_service.py":{"size":9669,"mtime_ns":1784955109000000000,"hash":"2d4e38178168b11f3aeea64a4d0ab4ae60c9a93ad9d7d7568456374af65d7c57"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260725_pl_tripartite_menus.sql":{"size":2113,"mtime_ns":1784948072087970834,"hash":"c4897f7cff3c22535726f105d1f2e543eb551f6543e8b256ced85ae2a38ee683"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/invoice.py":{"size":5868,"mtime_ns":1784991682000000000,"hash":"65eced0eea3c4f9567842be545d2eb042c24398d5ff5eeda2aff693fcff06ff2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/invoice.py":{"size":1896,"mtime_ns":1784982228000000000,"hash":"909460b2883e85110e15a56d5755748e1bcb3e26dffac89684440813788e8668"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/invoice.py":{"size":14356,"mtime_ns":1784991670000000000,"hash":"fb3fac6667d415b032880fde5ef3413dfac150686b738d6b644ea07d0fc96412"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/invoice_ledger.py":{"size":10778,"mtime_ns":1784980394000000000,"hash":"2b67dc7e5d7280235dbe594bc6a984747ceb3415a527c78516cd60ef3ebccf1f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_supplier_hazard.py":{"size":3425,"mtime_ns":1784998230000000000,"hash":"2365e02c6f2584dd6d18e1ad3c8d3075096777b244cc1430ef913254c61a9442"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_invoice_ledger.py":{"size":1427,"mtime_ns":1784980394000000000,"hash":"9fc702e7becd491b05b730b711ea911f393f2d15509bc5f03f4e70edf7770a9b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_crm_supplier_hazard.py":{"size":855,"mtime_ns":1784996182000000000,"hash":"ce8bd619b1a6dc746541a57eccc095d19ccde3bdb88341995631e15fcfb14bca"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260727_pl_plan_create_date.sql":{"size":536,"mtime_ns":1785140686875543544,"hash":"0694b0b031a6461d8a8940f7403739a8d20fd018403a02a8f1e0e8bf2bc1490f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_plan_create_date.py":{"size":299,"mtime_ns":1785140895170402200,"hash":"7a05f3fcc2d9a36f08b0801f6fbf6ee4fe58982d9212d7a10a70b8b4d41b6f85"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260727_crm_product_brand_alias.sql":{"size":4594,"mtime_ns":1785160650030737687,"hash":"f9f6ea6ca8e31cf5622a31f8303fe81174769b7d094645a88dccfcd6484b9cc4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_brand_archive.py":{"size":3334,"mtime_ns":1785453570763074999,"hash":"feca7ad16664603f04ee7fa38f03187ecfb70978cc41fcdb47d3fbfb54a11fbc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_inventory_service.py":{"size":7058,"mtime_ns":1785453321817830521,"hash":"a13cd5ea34dabe91b4663551824c3da9fd2a64ac3fcbc46b2b099644f308b457"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260727_split_brand_from_product_name.py":{"size":5120,"mtime_ns":1785202591782265408,"hash":"d9d9b949cc5f275764b7ea771616141084a0c7cd256dd3262bf532cf4ac0f20f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_brand_archive.py":{"size":2440,"mtime_ns":1785453323711185768,"hash":"2a704d8278c46f510fa020cd9aed4ea26fd978262d7fe728287bcfe5726798e9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260731_pl_plan_plan_date_nullable.sql":{"size":223,"mtime_ns":1785439209757662121,"hash":"50a633398cc1c8288c8b5fa221885272ca963c4b777b70102c96632f2d51047a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_feedback_brand_qty.py":{"size":9813,"mtime_ns":1785452749855419713,"hash":"c67d06fc7ac5cc9b3be0c2005f30a4914ca97c27cd5a7c80e7814382cb05c82d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260731_pl_feedback_brand_qty.sql":{"size":4927,"mtime_ns":1785445506581710120,"hash":"618b647158c133824ead60382d2b6e73713ea32a7b2224efedea431e071cc89a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_feedback_brand_qty.py":{"size":3424,"mtime_ns":1785452788497663858,"hash":"1fe2a5c0b1968f864ef22a436b0e13a697977ef09a71c6e8bfda46da25825f90"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_product_display.py":{"size":3590,"mtime_ns":1785451173102957680,"hash":"728e1d79035875ac350201c943241493f04006a2e1f71d7e3e41571eeac721e5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/backfill_crm_customer_license_urls.py":{"size":7789,"mtime_ns":1785467213374029636,"hash":"a0faaa83477187d8b4a9299d1b170f5ea2c5ca3b450fb4437bf1dc30ab1b5b1b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/backfill_crm_contract_attachment_urls.py":{"size":9795,"mtime_ns":1785469147228035015,"hash":"6331fa977cbb794c3ee9cb072692c63b05f23f071ab8df1d0b8368455af3b82c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260731_bx_reimburse_invoice_attachment_id.sql":{"size":784,"mtime_ns":1785473095766881076,"hash":"702c6845b0b936d4a5a06918fcebefd71b38ca4b2dcd7e51ee45af19c77407b6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_approver_setting.py":{"size":3632,"mtime_ns":1785560604338687232,"hash":"7442687a3dde4a0a354064c3fef7503d37c9ce3f1991873e64befd2d1812ba4a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_quote_approver_setting.py":{"size":1015,"mtime_ns":1785560055190832342,"hash":"2a7e91833de33ed92ac8e9157746f15fd7a9e7c5f25bf043dfb0dd7c77859715"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/quote_approver_setting.py":{"size":291,"mtime_ns":1785560601528774704,"hash":"e978cab24ee46f23b7432bb6f411e760f2d8d782a924efe811608c2200fcba0a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260801_crm_quote_approver_setting.sql":{"size":2117,"mtime_ns":1785560449173091996,"hash":"66c92fbf3031539484e241934c14fee379a70b1b179a8b8345c5ae70c8498f14"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract_approver_setting.py":{"size":2875,"mtime_ns":1785561463337293690,"hash":"7c3aeed13e66f67159220b323298b414a9d1b1f9ca6b679dca31532be86a132e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/contract_approver_setting.py":{"size":294,"mtime_ns":1785561469090499071,"hash":"fca8a7cb3a75c82e9c3395f2471e20dfcdc469a8fd299c9c6ce5e79576a6c3fb"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260801_crm_contract_approver_setting.sql":{"size":1903,"mtime_ns":1785561454940491268,"hash":"f81470b97da71283b9d3defc81fd177cc2fea1dbd487febaebf7a8f24a73c71f"}} \ No newline at end of file +{"/Users/zlwu/work/00code/shanxia2.0/backend/start-prod.sh":{"size":7357,"mtime_ns":1782639355476060453,"hash":"ca89869446be74a2bf2367b3b28f448580220859a39a84ad9613ac5fe35a8433"},"/Users/zlwu/work/00code/shanxia2.0/backend/start.sh":{"size":9548,"mtime_ns":1780114661446983244,"hash":"4d632863e8a0cd81194b491d83a0218a4157435ae812dec76a6f6197b4d48e57"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/__init__.py":{"size":21,"mtime_ns":1780113982281973984,"hash":"60a04ff08fd97084e83ea809fd13feda6d2848be20ebf309e31fc1dad7523230"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/main.py":{"size":6280,"mtime_ns":1782790852770448643,"hash":"8f9da799977bee7134d87a26ff8434ac5ef8eabb0b7368dd537eee49ad7fd00b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/__init__.py":{"size":2207,"mtime_ns":1783208067881286091,"hash":"313e6da0e91d743ce891dd283458c79b50b24c4d909dc96ca7b3fd9d2bfa5013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/auth.py":{"size":7457,"mtime_ns":1782790841500516545,"hash":"34bac56e1c2cb6215f4b5fa2dc32d77d4b4abca51428819eebf4afd269cc51cf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto.py":{"size":1870,"mtime_ns":1780108930724444498,"hash":"c04b748aea86890a5971f749523c7b17dbad1ddd6f9f7f07a5679d159c984e33"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/login_crypto.py":{"size":3858,"mtime_ns":1780108930725155710,"hash":"b82d51afabf2293a9cb1fb2e5f994c383948e7f47ea95fe674686b4f3f3342b1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/config.py":{"size":6958,"mtime_ns":1784032424448146538,"hash":"c2fb44aedb880733de28afa7f92d2c1c681eb600f821bbeba2bcda3933e5bc37"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_pay.py":{"size":23585,"mtime_ns":1780108930725768130,"hash":"3d52265ce65d21e7103f94afa1e8547aee0823b5ea6d65c50317436ac81fb4fc"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py":{"size":11971,"mtime_ns":1782701669198208175,"hash":"0b84c32828939e6102bb3647691fa8f04b1f68e0e0e9f28127374cc44e19a11c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/database.py":{"size":1510,"mtime_ns":1782790847265601586,"hash":"8bc9c8ae62e2be2c6920036582ba448dfcd1711c41cebb62274ff6bc6ee14b0b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/security.py":{"size":728,"mtime_ns":1780108930725470004,"hash":"df0f01115064f7b8de1c81dbe9a6db39360c236610b68c33b3234a51d7f0025b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/request_payload.py":{"size":2842,"mtime_ns":1780108930725350836,"hash":"e9937151530ab1417ef297aef59111977725cf90be2a8fa76c00a0618789aba0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/__init__.py":{"size":61,"mtime_ns":1780108930724312414,"hash":"3dd1842ee59b0c804176b03b4b8a323bd4a252b7feb1bbc32db64f3a8928570e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/response.py":{"size":1824,"mtime_ns":1780108930725412462,"hash":"f1739352d65ea8287d76e282a59553aa8d63c97e35764c64ac378aa5bd9c347e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/menu_guard.py":{"size":1611,"mtime_ns":1780108930725223002,"hash":"3e26077288c3620a4780038b891a326206b45bffe00aca545bdae30172487235"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_collation.py":{"size":548,"mtime_ns":1780108930725025043,"hash":"0c680e25a18244ca839a7de6ed1f4313b33bc8da118d89c463aee1b6af00c6f9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/context.py":{"size":421,"mtime_ns":1780108930724824458,"hash":"83a10aee67162374993c10a30bf8bb8bd9c4b35cf48f42c832415ccebd91660f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/utils.py":{"size":1498,"mtime_ns":1780108930725607296,"hash":"09323693661c1d4560458b86a954128ccff82bbaf6522da0b44f24da99ddf9ea"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/storage.py":{"size":14141,"mtime_ns":1782855136810943216,"hash":"3ae2c413c10898a8adb3d6773870bafbfbc18c739c10e0e8b4f765b4b5ca6c08"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/order_status_compat.py":{"size":2828,"mtime_ns":1780108930725284669,"hash":"5349e5a0745ee6734c4a995337779307adefc46f453906171988a77de2081540"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/exceptions.py":{"size":4946,"mtime_ns":1780108930725084335,"hash":"79c997d964bca1a4f12f2b92fb1f181fdb9e2b3cf72eae39f4cc164d23794fd7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/data_scope.py":{"size":8043,"mtime_ns":1782648925694296304,"hash":"626dff86937e5cacec634ecbc61cd53d3763d760223a1d4ec7cd11f64e59a220"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/admin_request_json.py":{"size":2669,"mtime_ns":1780108930724378914,"hash":"4f68b3cf84291e7bddad6ecf4bb4d29ca5e1ec246a9f7f9c4cf5909d0ec1174a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py":{"size":10876,"mtime_ns":1782790001926627098,"hash":"b39f128b6612589ea6ac5babd30752e9585b3af07b82bb1ad53c9e3c0d90816f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/wechat_message.py":{"size":11194,"mtime_ns":1780108930725684255,"hash":"5086070deb14d99d1a69e419b2299ec4ea2fe128de80fe321b0c3c531fea7a88"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/models.py":{"size":36012,"mtime_ns":1782699345666495916,"hash":"01f974f182660ec4f215bcacc31eddadd7899d60d95aa19a61046579a994512a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/__init__.py":{"size":2186,"mtime_ns":1784035957226402359,"hash":"5af681963b36af57eaca7fdfc7f707255008ffba18df1a8c2d5903f58fcbf159"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/base.py":{"size":2090,"mtime_ns":1780108930807298966,"hash":"fda71bbe87dcb29c6f0ffa9337e9f39c2c06d912df6cb75d521f0e87c7c73c6d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/auth.py":{"size":1315,"mtime_ns":1780108930808197763,"hash":"018b82e42bbb055250549c54ba700ee01cf28cd753397d6c162f9e60185908e5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/user.py":{"size":1911,"mtime_ns":1780108930810184774,"hash":"3d3c159018cab6ed1cd3de7034ffb1fe77a272b9099901a1882d07aa15fc90a0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/__init__.py":{"size":1159,"mtime_ns":1780112973062398026,"hash":"4e8b0bda6680e2c8740c380b96eedb859ddc584a81bad568a18ba6beb001e480"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/menu.py":{"size":816,"mtime_ns":1780108930808681891,"hash":"17e35f2d7bf95cac00d81357f69fdcbe849e855daa05570c3302de8182b4df11"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/attachment.py":{"size":328,"mtime_ns":1780108930808144846,"hash":"300b74c51c66cb0fbf8c9f4d84a4b7bf29dcc9b6a67d922f8e1d0df05f9fc5bf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/common.py":{"size":555,"mtime_ns":1780108930808426681,"hash":"caa0c03398e54017b25cca2a16cf8d232a59739893a16e4c33b51a5316d8964f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/workflow.py":{"size":3949,"mtime_ns":1780108930810245983,"hash":"e5aed7afcf903c838a35cdaf2230a93d221c63f5c6baa1497e455afac8587a9a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/leave.py":{"size":1449,"mtime_ns":1780108930808614098,"hash":"c54098a69bd4490290dd8d7809ed8764a3f38e8c38692eeef2b505293cdfaeb8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/sample_code.py":{"size":12322,"mtime_ns":1780114002126415047,"hash":"5b74838b3920f9182d092f8a1b721697f1a62e8b90728b9f54101dbb96baa40e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/post.py":{"size":5164,"mtime_ns":1782688288640487823,"hash":"370a7c2b5de64c6b72f98bcf7fbbc166ba2a7f5673c6e1426b10bcc88220bb27"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/user.py":{"size":14214,"mtime_ns":1783851628178366109,"hash":"aeac623e3020fee4cdd01e463ced23e4e03539a17c5b57dcbd9d88aac5a4fb4f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dict_type.py":{"size":5537,"mtime_ns":1782688289303121533,"hash":"f4edc5824466d0096b3b70aeea7b4460a9fa54ca0929421759b625b60c56c505"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/tenant.py":{"size":5659,"mtime_ns":1782688281816798167,"hash":"0192db8ac9c3de42fe8ee58324c77111e152bf4c35fd15c0b16467fe243712f0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/biz_no_generator.py":{"size":2534,"mtime_ns":1780108930726090799,"hash":"e6bd375987e47f6ee80294686db64377938a286767bb28324f3eda2ad39ad546"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/__init__.py":{"size":169,"mtime_ns":1780108930725878047,"hash":"340e3c08174d61829012879e684f6166803b88c819c58b54a16a11d210dea85e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/role.py":{"size":9417,"mtime_ns":1782688282481859519,"hash":"008550fe8efce5310afd3d41d944cee4b68d71763a587583f8832855480477f7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/menu.py":{"size":7600,"mtime_ns":1782688282878700273,"hash":"36951a77088782d80500bfa6266b46a564a670e10b70af7a28cdee8c50741098"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/site.py":{"size":6525,"mtime_ns":1782688288935534527,"hash":"a7bf593eff76d08b338f48f9a035fa1493f4ca88867bf9fdf4e9af06b6165759"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/api_request_log.py":{"size":4562,"mtime_ns":1782699354647000111,"hash":"f233bde579c4f6c7f2fd6030878c5946fb5dd5e247efaf4fe80d3f48622c19a8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dict_data.py":{"size":5418,"mtime_ns":1782688289691482227,"hash":"5bd3fd93c60956dab0268e9f4e6cf315d0a9c9656d649f4abb40858ba1d32911"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/ethnic.py":{"size":1012,"mtime_ns":1780108930727448890,"hash":"7de1eb94b9fbb897a7b362ffdb5df5ab1020aa7247c7c37a2a2a2aa5cdbac8ad"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/workflow.py":{"size":25052,"mtime_ns":1782688290021142467,"hash":"6ca7e3b79e91356a050592b768d7a6749e1bfdb2841a208c7235899603368aec"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/dept.py":{"size":6604,"mtime_ns":1782688283203296227,"hash":"ebb38fcd527fdac4dcbf0632ac926e4cbe95dddb5fab79c3142b010e7a48ea7e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/base.py":{"size":5360,"mtime_ns":1780108930726010257,"hash":"49fdea023825ea249923b1cb02d353dcede1850158d3555a2082887925e69b9b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/leave.py":{"size":4765,"mtime_ns":1782687678100096646,"hash":"847095009bddac2d77dcbb485bcc57cbe168ff874989c197f49f2a28675d2525"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/public.py":{"size":12682,"mtime_ns":1783858998986861832,"hash":"b98ac3f3bc95c2b42c481ac9ae9137528e55845d425e5d2184827dc424304e42"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/__init__.py":{"size":665,"mtime_ns":1780804649232229595,"hash":"f720195209c1783d8b2526220a086c2ae2769d76a12bd7df74136f5432c7b75f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/menu.py":{"size":30932,"mtime_ns":1782790854866245387,"hash":"4e9de047e67ff365d17ac28d30e1baa72cfa3c651caa1b9776e225fc07da0e58"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/admin.py":{"size":50055,"mtime_ns":1782855138852859245,"hash":"a5e74057222e3359f6077b2fd05b2db4d058ec2702243cc449bff8d448d44a05"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/workflow.py":{"size":21202,"mtime_ns":1782790854865038715,"hash":"3950dd8d9855f5ed33a0e15883f7e442c4e26bc51672209b1e68ce0d0c9ce399"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/leave.py":{"size":6916,"mtime_ns":1782790854865571301,"hash":"6e03239433bbaecc54f72fa2aba2578573ae6c7fc881f287ef57dafed1a0f1b5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/workflow_callback.py":{"size":3584,"mtime_ns":1780108930810395025,"hash":"a033c13c7bee7f4b636198c1efa47f2abba0d890657e52b0b7057568d4d83a52"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/workflow_engine.py":{"size":14042,"mtime_ns":1780113992914903818,"hash":"5c06a59c734f598d5c7ebe95d30f048ba3a97302b938bc9320d97e5a053c7aef"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/web_auth_roles.py":{"size":5592,"mtime_ns":1783858473640363111,"hash":"04c2cd67a7ec8190aa7a9db717a722cd347a52279ac3ef5bd284777f0698a904"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/ws/__init__.py":{"size":26,"mtime_ns":1780108930810617026,"hash":"d4357444e9b5b0a8593000fb6e4dc37469ebe008e675bf42ec0d55d463f88fc6"},"/Users/zlwu/work/00code/shanxia2.0/backend/README.md":{"size":2752,"mtime_ns":1780114581291841672,"hash":"f5def8d25af0556a443c31a73e81f958883b60cfed8b31fac457f2832c2b6d58"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/crm_models.py":{"size":66592,"mtime_ns":1784122553836870448,"hash":"1a0a09e5f5d9eb2d5e18e2f7d851287442ee370a3abfbf0b487ee4b4a18d43b3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/__init__.py":{"size":0,"mtime_ns":1780201410213315055,"hash":"a6d57250b43cbdecb56b7a9d55d29642b808be368733e14b7df2bd196f54d64d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/product.py":{"size":7820,"mtime_ns":1783820526204158517,"hash":"b8d626eca1b0fc6b0216a66afb1cf234155310d3077d940d5158111f873a414b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/__init__.py":{"size":0,"mtime_ns":1780201410210254759,"hash":"9b8fcaaabdc85883c9ef392b596b60db0bd3b2f1623fc8012e55003f234a9875"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/product.py":{"size":25974,"mtime_ns":1783820522540308906,"hash":"6d1fb7bc06a4f16c729b1b226377ffa38b9b47bf1cc75310dcefbb8f6e480574"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm.py":{"size":151289,"mtime_ns":1784119033682636742,"hash":"ceaa64369ef66891310f391836c580beefd5a69854b3a5a0539a419744a311b0"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/customer_pool.py":{"size":9646,"mtime_ns":1780202350147822837,"hash":"4f0ab87e7a12534011b69f58079ca206d5443eee594849ab4aae728bb847de0d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/tenant_context.py":{"size":693,"mtime_ns":1780201410210198550,"hash":"0a810658d894d35b9e981faa1448e1d02d617ecbe563bd711f6ce5a8f9db1861"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/pool_rule.py":{"size":1848,"mtime_ns":1780202212734233591,"hash":"b0331e17e801d206fba2fa89df1a66d1758d850dc5547e076218e16c8211a3e8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer_pool.py":{"size":1340,"mtime_ns":1780202198698231150,"hash":"7a6b76e0e39ada0783dfbee92280e9f06299b6662b08abb13ab1b0d9c70fe370"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer_follow.py":{"size":3716,"mtime_ns":1780201410213934514,"hash":"3979cecd62a4f2ee5dd925639572208e36b397620d91a9ce49a59adfcb2a9d55"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/customer.py":{"size":13811,"mtime_ns":1783823672041317102,"hash":"b91167282158aeb11046dccc4bf2f29a13307a0413b3d7b3c860b17d37f8ad4a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contact.py":{"size":4856,"mtime_ns":1780742840975948859,"hash":"60c714cc254d70f39b43205bbcb7fb4c563e807ddd070eefaaa952ae96048377"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/pool_rule.py":{"size":8816,"mtime_ns":1782687680547203228,"hash":"779f7f46e7ef8bfba27390d56fa071dfd3a8446d9d3b3361003b1c239f7169aa"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer_follow.py":{"size":8121,"mtime_ns":1782687665525772610,"hash":"ec67fc7667847017a8d8b5a276f5c75328bda7fa360746d80c7890de3f6d4b76"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer.py":{"size":23825,"mtime_ns":1782687664490640155,"hash":"5d8934ae6318de87b0761686fe491a7ec2be02792a85d84308c383af3193fa8a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contact.py":{"size":10482,"mtime_ns":1782687664918872966,"hash":"f4e3a684dd7a6c7c927e10e8e1e0c108c151b963777b85c5b74d7e7871f3a438"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/generate_dict_reimport_sql.py":{"size":10692,"mtime_ns":1780201410245078685,"hash":"a4faaf61f246dad04ec3933083ab4348e5d2987ae1ed34b1f6d8f19535642a05"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/statistics.py":{"size":412,"mtime_ns":1780201410215906642,"hash":"fb1957d0fe87f22c37ba5bdaa5f3bf2bb4a40685a21a05dce98326581bb4844b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/customer_pool.py":{"size":3725,"mtime_ns":1780202237342131933,"hash":"0f26ac2bcb585241f25302787184db4db422934e5d896ca25bbe7efaf61d92c4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/statistics.py":{"size":5642,"mtime_ns":1782649310467813967,"hash":"f954dc5479f42a52fdb3f05ad9076fdbe43e569bae85299fca6c8f37c7323cde"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/invoice_info.py":{"size":3104,"mtime_ns":1780406386885207867,"hash":"a59df3aed2c976904e3b5325fedd1621435b322645aa71349f3356e0cdc17424"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/oss.py":{"size":1584,"mtime_ns":1780201410212966513,"hash":"9349799b02a3531d8e1b46f9f70d3b6630afd7306663c779bd11f25448a16013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/invoice_info.py":{"size":7446,"mtime_ns":1782687666050313280,"hash":"e0f2069c43cd272e5f061d30b47a42140ac37aa26379985fc781f8a3851aa44d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/opportunity.py":{"size":9391,"mtime_ns":1780242127112297110,"hash":"2e068961824a1d3ec0da0a94a3c494b63582b3251e5f4e030ce3e12897e85002"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract.py":{"size":10565,"mtime_ns":1784195323916483606,"hash":"45d9dfeb58bda22227fcd242c738086431616466bb8ee9f1466927d75d4bec48"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity.py":{"size":42231,"mtime_ns":1782687666592409903,"hash":"75f54438002e070076fe37ec2211c5fd67bf4aebd2607ac94db15e30d6f634d8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract.py":{"size":92433,"mtime_ns":1783763318740360571,"hash":"b2362db2f2df750afc1c2263f5e6ac1ccd5daa8b93ad5650d56028f452597837"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/monitor/__init__.py":{"size":1,"mtime_ns":1780242127108406092,"hash":"bb5b318d3cb224c50a2e0286e145f89ea7278437437fd17d7c865d67ad148076"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/monitor/operlog.py":{"size":1069,"mtime_ns":1782699353340106185,"hash":"b9f0a382f8990f69391b26bb75b4538d141d6adadc4260fecaa8b33cb44c063d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/monitor/__init__.py":{"size":1,"mtime_ns":1780242127112307360,"hash":"0592c62ce1172d93aca98cbd9aaa54b9c2668022abf3581249516472db312293"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/monitor/oper_log.py":{"size":6673,"mtime_ns":1782699352542520022,"hash":"0586702734f693ee099af38d407c71cc0a840153f93174699c5a5201e0a9acbe"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/monitor.py":{"size":2789,"mtime_ns":1782790854865860510,"hash":"5c13164e49d7ecb6836cf8e65a705fccd518399b85d3be2318c9581a98bacd51"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/clue.py":{"size":9417,"mtime_ns":1780215022189075651,"hash":"2676afaecac4bb6da185674a9421dfbd40834ca21520adf66bb6b175fb728677"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue_follow.py":{"size":8493,"mtime_ns":1782687674053739962,"hash":"54881f876d1842ee4a344d049ea4b5bac18b243535338077cb3eb3ec8b60e9c1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue.py":{"size":25820,"mtime_ns":1783155705954031080,"hash":"3526af7e7e79d505911690355890ccdb3a1c30d302534ffdc8626a454cc2499b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/clue_statistics.py":{"size":11229,"mtime_ns":1782649305846991404,"hash":"fbc3b4f3356256787839cc5b2a6f8dff41dcf9eb27c791e427e816e3ba14e094"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_follow.py":{"size":10069,"mtime_ns":1783821986040417425,"hash":"06c9f3deab3472b20429c12a618ae2d4d6efd3afa2353ac44cd52651a596af4c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_product.py":{"size":10346,"mtime_ns":1782687669972916544,"hash":"40b497a41ce4003e128dc305abedc54e01dbaad8a8f7bc1ecec1662a3953a1ed"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/crm_export_columns.py":{"size":9594,"mtime_ns":1780743830255260394,"hash":"b20594507aab09cebc3d540acad04547bf780cac9c885187138f5d64718ed513"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/__init__.py":{"size":0,"mtime_ns":1780242127043319167,"hash":"a66deceefc987198863f61b8aa1b5715483a69c4a15ef47cd5586c5d8e429b97"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/excel_export.py":{"size":4411,"mtime_ns":1780242127113233948,"hash":"7fbde3fca845e4705487e7f801caee308bcc0c99a9da7d0c99681a96eaaf6076"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/supplier_info.py":{"size":3679,"mtime_ns":1780242127112269527,"hash":"8b797e9dee6ac7ff806a8ea23bef5fedce648502ea23287e1b417e9f96d22c2e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/supplier_info.py":{"size":6916,"mtime_ns":1782687684650105460,"hash":"0b66714e36609688f7ce79ecda0679d20df115d2d64a0dff1cc0fc76df7dca6b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_product.py":{"size":13126,"mtime_ns":1782650413581368849,"hash":"cd2fc23852ead3c4db19e34bc33c1560fc5f5d4cd7cf51b61def8bf37c44c853"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/quote.py":{"size":5961,"mtime_ns":1780745856749183842,"hash":"29c52786df396aededd0850e3c8a3a36f3fb6a952af03adbe1768dae212b6804"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote.py":{"size":48137,"mtime_ns":1782687675213433843,"hash":"a2ff5c5b74a2becd0949aab6aea8cf63440cce2c0bb22e1a1661463e0b2e963d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_product.py":{"size":10537,"mtime_ns":1782687676011228777,"hash":"57d9d5b4fc2bc8b68c0388a4b8a9c1322539ed7e538764fc23521916429e07c5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_share_log.py":{"size":4277,"mtime_ns":1782650254630170341,"hash":"5bfbf7ce2918f9ecdbbca6fdce17d200cd52cdc71b2dfb44ac126a36ca0ed734"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/quote_approval.py":{"size":8816,"mtime_ns":1782650314936479798,"hash":"736353b8c2c5073d260e007a166234bd7d57958bcc738c56a1d39cfb22381180"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/crm_quote_pdf.py":{"size":9877,"mtime_ns":1780242127112382277,"hash":"fec04892fccccc3601fbeb012c92c77110496910be44102de40b4610148fa58a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py":{"size":25633,"mtime_ns":1783825326810765171,"hash":"c51b70766aae85dbc537bf5b48a2c350c73ea8e93bcad2a9660d8d45c6d0979d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_approval.py":{"size":13958,"mtime_ns":1780763324103831772,"hash":"3d7fbbb90728568a2577e52d8986ccbec8f599d04a0ef9e330939d1fe729bc98"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py":{"size":29547,"mtime_ns":1783825526614169736,"hash":"95969972c0773528b91d9728d303feae5ca7187d89a49495d5129dcedffc19dc"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract_template.py":{"size":2897,"mtime_ns":1780229101351431207,"hash":"935adfc7659e31201cd83ba8387bf6abcb39e7cdc63fa4692d699ed874cf113b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/contract_change.py":{"size":2496,"mtime_ns":1780229100306468735,"hash":"05af42f088f6cc400c1e3445d4a2c96670edf482328b361aa4f231230d958729"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_template.py":{"size":11858,"mtime_ns":1780229131746659196,"hash":"b9bdbe6a33c933aefcb25cc57e94b2fd2dc75f8e5822434f3912aa0153dfca00"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/contract_change.py":{"size":15985,"mtime_ns":1780229123819597506,"hash":"771b110d3d136c45106dd61171c724c559b5b4bf572ea7b8c2b648f0bfe629c1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/crm_contract_sub_routes.py":{"size":25165,"mtime_ns":1782650354912882614,"hash":"b2733fd74cb7e6cbe6518fc5a5700e387601afc087be09f395f3c61372099847"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/attachment_biz.py":{"size":1122,"mtime_ns":1782219602888987090,"hash":"fb9fea8983524e3891357016b6546d982c4a82cb782fc01425f70472d4338b6b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/bx_auth.py":{"size":1473,"mtime_ns":1782650780925056463,"hash":"678d9ff99b5c89575ef47e5c9e61d495f364917fd6cfb2b322c4d5035d3ba359"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/bx_date_range.py":{"size":2363,"mtime_ns":1783745556349035158,"hash":"e8b487a9bb4072356cae7b1b38496c441f9a1534d6807798448e6de97073d669"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py":{"size":4679,"mtime_ns":1782003396630684570,"hash":"bc3f798cfbc359e0327d72e3c0513fe9cbaee196d0d85bcf6567cf5df4211d97"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/bx_models.py":{"size":16644,"mtime_ns":1782003187247224106,"hash":"37c7372f38d76f1020d31ce8ca9e7f0cb3bc3c204a50deb092b494ce8c983fbf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/__init__.py":{"size":81,"mtime_ns":1780750556881734563,"hash":"07c3422f745afbff1c8162b3782fbb4b8de65084e7e9bbcf45abb9d433d65f98"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/common.py":{"size":1547,"mtime_ns":1782003187605255900,"hash":"a75ca6a0d92f93408eee00cc5053206d28a545512e4cd0f186be9e00e3346ab1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/__init__.py":{"size":777,"mtime_ns":1780751360180065853,"hash":"3525eb716c238682a07a116818d318b8a494fb24b9cefca5114d30bc50d095a5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/expense_item.py":{"size":1668,"mtime_ns":1782688293668634639,"hash":"ac07c7b05fe990e743dd5b4e96a85b59431479ca11b98cce7c340a93dbe99ce1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/workflow.py":{"size":1677,"mtime_ns":1782688293973889288,"hash":"f683e5bb7a45d0bae3b3f262c201453155eaaaf2c8d7f14f567a14295a68d2e1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/expense_item.py":{"size":3362,"mtime_ns":1782650913604714906,"hash":"c6a142011870516822cf11cff16a86c56908f00680eb7c6219c8441c9b63632a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/workflow.py":{"size":4984,"mtime_ns":1782650913326708063,"hash":"84285aab7499ce9280156c5814b2dc4fff42841803dd673cc6bfdc6eed498283"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/expense_item.py":{"size":4366,"mtime_ns":1782650887981843546,"hash":"15321fe1df77a555af579474434e3b401bd042555d19ea81a066ef754915612b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/__init__.py":{"size":34,"mtime_ns":1780750594045301798,"hash":"583b12a6d2c9fd4411b652741e73324df9256138946ee873a0ed03169f8dae2a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/workflow.py":{"size":5446,"mtime_ns":1782650919964956073,"hash":"1d72733147e0ed997094d7f92d1c1f5e1e108093a50e8e523b3b016c3dd676e4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/base.py":{"size":3931,"mtime_ns":1782687617846731919,"hash":"dba80b8f4e26bc59efd2b2aad6bd430c0315133a98bfbbe1b93113b60baba8b8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/attachment.py":{"size":525,"mtime_ns":1780750871480000584,"hash":"f287214c72345e41d9d122ca55b4d3e279635d99cbf10ed530de0ac32374f31c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/advance.py":{"size":4603,"mtime_ns":1782688296833335474,"hash":"74b6e8bf6906518f80f16f218f1af74d2c356a6f392a4e8a69466f4179ce0b92"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/attachment.py":{"size":5758,"mtime_ns":1782790898570675189,"hash":"e88b9181e7c1a839074656ce2260cd6f693821402a24f08dd1c0ef3c160f8fa8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/advance.py":{"size":13370,"mtime_ns":1783745567004734594,"hash":"3097a75d86d09951d7de7df10a32f5aedcf6ce11279bdf6dfe0005ec9d8a7be1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/attachment.py":{"size":4582,"mtime_ns":1782650868959755751,"hash":"3a6480cd051bd1af733a67e5babcd64f3f74cbe230d72364b599cde8b0c67a5f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/advance.py":{"size":24037,"mtime_ns":1783746967707088251,"hash":"4834348d099b32b70d14e1b56279dbb385f42519646351d8cb220da8c5fe27f1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/storage.py":{"size":3656,"mtime_ns":1780750869826924187,"hash":"ac98980bd5b6cbab6a9394b6debc678b050cf4df969eccbc5f2d419b615937cd"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/bx/reimburse.py":{"size":5638,"mtime_ns":1782688293517624966,"hash":"aa47d8e87982a4077ff067dff2955db9eb67171d6368bc636c1eea17ea7682f1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py":{"size":15431,"mtime_ns":1783747621462206303,"hash":"dae4bfc4be69ca2f3ee8fd2e9e3bd6053a2904c8f7a0c83e536f2dd71874f918"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py":{"size":34743,"mtime_ns":1783747614591546341,"hash":"ba8f3ff0304a6668bde3c2e6c3e15427153389f7320b943fb261d1d947b41d1e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/bx/payment.py":{"size":15715,"mtime_ns":1783745581266319098,"hash":"0d0b8823013a63f91baee0ea19b56f203e70fb1e450f873cfeb634a6cd017f54"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx/approval_cycle.py":{"size":1296,"mtime_ns":1780758200904804714,"hash":"308c087d94ac253bfc7e2d5455a06ae8ceac034adda41b5c61dd315dc167efaf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/db_models.py":{"size":8110,"mtime_ns":1782219570945208920,"hash":"249bb0971c263436095a6324457557b6ac5cfc3ca5ac9bc9499a9b4cd21d42bf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/__init__.py":{"size":544,"mtime_ns":1782011200096708592,"hash":"822060230e155b8704feb447b908c226d4c53e62b3e6df65c89dc3c7a0e6e07f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/__init__.py":{"size":0,"mtime_ns":1780805614160787709,"hash":"2cb780fb722e6dbf2ecea6f6fc19345fb453e1a3c40694ba0ff7465eb7cf7d33"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/base.py":{"size":2754,"mtime_ns":1780802262496001324,"hash":"d2fd88aa376aa5914125381cf61a4ae0f343657d6bd7db1f9fe1254e7aba5b2f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/vehicle.py":{"size":591,"mtime_ns":1780802980783200520,"hash":"d87e4262b344e02a7be21534e382e7b75f5543f599d673ddc046134ad0e8ba4e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/__init__.py":{"size":84,"mtime_ns":1780804619867600032,"hash":"5193d61f7204f825551f083e79722805fb2abfd953bb552e80950bb3ff9784a1"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/vehicle.py":{"size":3780,"mtime_ns":1780802985736476363,"hash":"aeb49bdd49cb5091c37275b856396e75bcd24557e3a1b58ef668910b1b0aff64"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/vehicle.py":{"size":4776,"mtime_ns":1780802999039302982,"hash":"cf32c66499ca86285561b573d222837ecc76c3fa51b0091b802485fbde8e2bf2"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/plan.py":{"size":1788,"mtime_ns":1780803836065964235,"hash":"30452b2f7fa19f5677475ce08b3e355dae2440d80d2e9049f8417de01d822863"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/plan.py":{"size":4167,"mtime_ns":1780803836065953735,"hash":"acac159dedfacb36f02982b700b2a7c7a8fbb4644eb89c3b0c13871941917864"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/plan.py":{"size":9619,"mtime_ns":1780803836065902943,"hash":"e311f2b8b5e7785db764216fbecfd2830a11569ccb827a00c8bd3a2ba3804383"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/inventory.py":{"size":3948,"mtime_ns":1782219604456801044,"hash":"19ea80e59a1309518ad6183a6b0b8751401f4724d7b5101d47defc2417ec36c8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/inventory.py":{"size":16423,"mtime_ns":1783156035144390497,"hash":"901602a8fe362aec9b89ac6f2ee578f1eeb105fcf12a1a6c3ff4ef98f4ad1ef3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/inventory.py":{"size":10663,"mtime_ns":1780803878293678536,"hash":"e38abdd78010b0e96dcb65ed826de03a752b40e3355546ed06a4b07640cf7013"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/weighing.py":{"size":5347,"mtime_ns":1780935341753643087,"hash":"f734c66269b713a840d7ce6c1c6150bd2dc00b114b09963362202d119c82301e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/weighing.py":{"size":14940,"mtime_ns":1782687688848020877,"hash":"71d143eb05d0d3f785f5962892bde64dee3c2937139c975b52af62628f308d46"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/weighing.py":{"size":24042,"mtime_ns":1780804029884092079,"hash":"bc9d5cb59bf90597db0e0a1c9afcef5c2b429c3945c92be34bfdc1e77d26ba28"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/db_auth.py":{"size":2500,"mtime_ns":1782790853674329877,"hash":"4988b71d4e54b326c333872b34743914d67b15fb753c1b0231e9b00b366458a4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/plans.py":{"size":4876,"mtime_ns":1780935329287069452,"hash":"474cb68905249cd5a6237443a412d49cb28af2e0cec61c9bf5c34ec54db1240a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/master_data.py":{"size":619,"mtime_ns":1780925759582999052,"hash":"6f6b2c2e1478efce74b8c6e6fb058d914b8b79adfadf2fea2d91cb55d3f9cdce"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/vehicles.py":{"size":4748,"mtime_ns":1780925781827569662,"hash":"8f8b32dfbf4046cfa0b6645d211732596f7027d46244d9c50132425220065483"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/plans.py":{"size":17098,"mtime_ns":1783156035873015369,"hash":"bd2c8344e2ab765ceb2a2c91f5cf2facea319ae66c9097f5468a7f5d753b67dd"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/mappers.py":{"size":6955,"mtime_ns":1782219619253708711,"hash":"b9e97f66a0a248d06c2f960c3f5ac4fb3369cc976c16709227dee0cc1513d221"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/weighing_logic.py":{"size":4110,"mtime_ns":1780804818442134500,"hash":"468ded88a0a4a397a96884580c88c59291c0b6effa897f08f1b3fea7857f9191"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/dashboard.py":{"size":514,"mtime_ns":1780804990870580151,"hash":"f2c1b1014d0d769abf32dab3783de65fe7fe327c956ffbfe44adce94542f8892"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/dashboard.py":{"size":6576,"mtime_ns":1782651340330906738,"hash":"753703fbbe8ddc02d8fbdae78df4abd1448f5ce5878e2f0390111360fdc300b3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/db_auto_plan.py":{"size":949,"mtime_ns":1780805095845033710,"hash":"9f7513cd2e74f9ddfe5cbee4ae58a40ee7a58aaaff051d590b19a6e1b08bb46a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/plan_helpers.py":{"size":386,"mtime_ns":1780805092108105489,"hash":"5c6ec7612b204e1dcb65c5daf03fa7f8ffa7710cd1ace63be4f7ca00cbf318b8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/auto_generate_plans.py":{"size":4699,"mtime_ns":1780935400833764213,"hash":"d0760cb8155d60e18040bcf6fe41e6964640a3dffd6f4b7bb68678c9f31ab29a"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/run_db_auto_generate_plans.py":{"size":1043,"mtime_ns":1780805102157096922,"hash":"3cd8f15b677f21b2873ff384fc0581da264a53ee4318da3c8262101156e3225b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_dibang_data.py":{"size":20215,"mtime_ns":1782011225157870526,"hash":"28a49a423a784e70bec424b702f3d58f69b6f847153c061414efdcdabb660d0e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/inventory_id.py":{"size":2574,"mtime_ns":1780934632326984469,"hash":"c5269cbb273d987c296143b83f1287762ce67d7ddeccfb0a72bc70234bad9f12"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db/product_helpers.py":{"size":2106,"mtime_ns":1780935268573313971,"hash":"cea6b0697eb64081a79d18ab95f0f0477714505a7aef82a41672197b15fc8b14"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_db_inventory_id.py":{"size":586,"mtime_ns":1780934647395760353,"hash":"71a9617d5d0f2c23416686eded204b4c941b47afc3fd6e3facf0c75401e883d9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/models/pl_models.py":{"size":61386,"mtime_ns":1784032430468998611,"hash":"e23b4653b806a1917eba187d8a3584dff598ad74bc21c8295c179abf0bcfe17e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/plan.py":{"size":22053,"mtime_ns":1783754594278544472,"hash":"f3a69a96b7916cb34e23e673b3155d83f7d9698b2582cfae96dedc392da8e6b8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/transport.py":{"size":17945,"mtime_ns":1783211732481443217,"hash":"477ebd0c4c084cf8bccd10865e4703b6b34829d30b791c32232d96c1bac2947f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/__init__.py":{"size":5012,"mtime_ns":1783242582112287271,"hash":"1dced39f250919efc4aa798daee1efef3adcca054c7483843536c455919ff106"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/freight.py":{"size":11275,"mtime_ns":1783213205154827373,"hash":"557f9e9f06ab6f18eb33f54a579fb8ab0f6992d9b25bb530a2ec49d5b2365708"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/inventory.py":{"size":7742,"mtime_ns":1783242580346813026,"hash":"9b57e84bea4844ce93220773544064ed6979c5823b07831bc5fe734b6dc860d3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/plan.py":{"size":48150,"mtime_ns":1783945795484267217,"hash":"a9a876816af12e43b3fa6b9dc748b74b7107f0cae590e68a2a789945617c620e"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/transport.py":{"size":33087,"mtime_ns":1783155250374329483,"hash":"6f7703d37ce761406d42f3be4e53ee85be0d3e43e5b880401087dde47ec6608f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/__init__.py":{"size":1243,"mtime_ns":1784035957226411568,"hash":"7d66d74042036571b769e5364616560597a3c3347cb9dea6cfbe04c40483b5e2"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/freight.py":{"size":10543,"mtime_ns":1783760751060550793,"hash":"2d64ca83553dbfc928887171941761114c5db012b9c4a01d34e2b522902bac38"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/base_data.py":{"size":33513,"mtime_ns":1783849851800999450,"hash":"133db64dcfad9ae687b90084eb8f1b5f713ebabce852bba26b600cab52e51c50"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/inventory.py":{"size":13188,"mtime_ns":1783242583174353699,"hash":"da03959cdab792ef503edae6ee27e45f9b5a8db1c63cdbcd97bafa85acc9be71"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/check_pl_json_aliases.py":{"size":2918,"mtime_ns":1781880510604174541,"hash":"b04c5636779ecbcb3082eabdbf42db846cc31f7376129845820c6a4c1e829104"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/base_data.py":{"size":19762,"mtime_ns":1783849843323086946,"hash":"21d29a63b2dbd9178f2239d109c4e71e668c2caf85788dcecc34e7533f0df4e6"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_personnel_service.py":{"size":6707,"mtime_ns":1783845044115228598,"hash":"34f3d1d723890e294aac765a66d7e86ca87f4288f42cec674bb9151de091fe22"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_cert_service.py":{"size":7694,"mtime_ns":1783849439910099822,"hash":"7bb0a6d4dfdb1ec11e72e971873791b8e188939e7c6b7328a0a2f4f8986c9d1c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_plan_service.py":{"size":39798,"mtime_ns":1783768766029953703,"hash":"0e0620d2878e4b28c560daf8095d30e8e8a281653d40baf01ef94e899ce114e8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_transport.py":{"size":9697,"mtime_ns":1783209147246415813,"hash":"aac3cfd1a30df824d1a4867c5b358e3155e19a051dbaffbae89c995b55767a8c"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_dibang_bridge_service.py":{"size":15310,"mtime_ns":1783777749440894312,"hash":"c506eb84c104ce63b98cde5b16644f16ddcf4e3aa335089bedcb4c267d21fc0d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/db/public_inventory.py":{"size":1492,"mtime_ns":1783211660985345577,"hash":"ed4e21307ac463410d296a2f8cf53f8e0429187344537bcf1e1212a7affa06a6"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/db/public_inventory.py":{"size":6968,"mtime_ns":1782790898570930774,"hash":"79aa205d2e5e89ed45dd7b95068b93e3f6db82ee9258b0331b21d6c8ab551582"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_inventory_link_read.py":{"size":782,"mtime_ns":1782225276143253698,"hash":"6471dfc9a1fbe66223f79490a5827b2422e5ca6932305ccde6aef4b641676a6b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/public_site.py":{"size":8470,"mtime_ns":1783211738132414332,"hash":"08745e00bfa7bd756fbeef7ae7a1d3bf957d6403da51cf7825def02a38502d01"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_site_link_read.py":{"size":2362,"mtime_ns":1782225460524562610,"hash":"3b9e1b93d3c4375b6b3adb4476ceb0df356654089d994aef4fea7e4f29266c06"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_transport_site_service.py":{"size":3701,"mtime_ns":1782225248175867714,"hash":"07585f13aaad965c106e88ac26f5f8c58852c0c2bb0bdb91820185133d799219"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_freight_settlement_service.py":{"size":47560,"mtime_ns":1783213204589333188,"hash":"53a61d4da0cd2e2d0bac74abcca13de3f3d506b603453811d8f1cd53fa50b358"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_data_scope.py":{"size":4660,"mtime_ns":1782649048011371782,"hash":"9545dc65fac7e13bf07ece2ec828ec5957bb115e23d0ac8c996f9c70362a4ecd"},"/Users/zlwu/work/00code/shanxia2.0/backend/DEPLOY.md":{"size":2574,"mtime_ns":1782639356701497576,"hash":"6989c30ab5c99ebf488137e31e5561b4a00d36060716dfad3fc247b673538818"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/data_scope_helpers.py":{"size":3358,"mtime_ns":1782650085670691361,"hash":"b0aab03bc7b3afb2faf39410e9881b65e6a2eeecba592d1655b5b9359fb4dbdd"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_quote_contract.py":{"size":12491,"mtime_ns":1782650163950860693,"hash":"eb6b944df35fda5edb6675b69b00f5a83a75fd78785251d1e81e1788ed439cfe"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_api.py":{"size":14409,"mtime_ns":1782650231443625388,"hash":"fb4cf4178a4b7c5530999f0c950ed38310dfe81b3168c10117849d6f512be01d"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/patch_pr3_api_calls.py":{"size":3345,"mtime_ns":1782650279067732462,"hash":"57732d0beb80ee17b533c78ce0250967fa83c68354ea9d1972275ba1fbc39007"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_data_scope.py":{"size":801,"mtime_ns":1782650506729785291,"hash":"0f0275c56a43603e69a030dd1d284cfc7982a7636423cfff6d0e692eb4631cb1"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/apply_pl_data_scope.py":{"size":10945,"mtime_ns":1782650517176615737,"hash":"928fe2112c9fd8bab4da7f4fc67d6d247c78187ca3b1a4146cc2fd3d9e04697f"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/bx_data_scope.py":{"size":2394,"mtime_ns":1782650938092205819,"hash":"1e8e1dbdcf4bc68c2e30b99015e930bb9522bd1f633e95604ec6a62bdb2b43f3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/db_data_scope.py":{"size":796,"mtime_ns":1782651142571517234,"hash":"ad4e206ae53e25247ebb004e0ef586077a6e7df0eac7b14973c26b186cffb2eb"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/delete_guard.py":{"size":3572,"mtime_ns":1782687610196676295,"hash":"223d91c51a1677b6a4b7802d5571af14d5cda8bc45e4e757b1f2150990a69bce"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_delete_guard.py":{"size":1565,"mtime_ns":1782687611517772849,"hash":"5e2a45f63b7296e3a10dfbd4b4716e54370e1439248881d6591cba5c9f6581d6"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_carrier_service.py":{"size":3479,"mtime_ns":1783848338604396640,"hash":"7d12991ffd2e3d7b768aaa587d7f9ae1ed4d641f65ec3f053ed103fc74a5a005"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_recharge.py":{"size":6299,"mtime_ns":1782694169098881801,"hash":"4d5ab880c0c3ca91b485e1ba53725005b9f89fe205780d58a738c861dbb7e6f8"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_recharge.py":{"size":8824,"mtime_ns":1782693867411719704,"hash":"f084b6fb3e80de0455ee9cfcc857ae5814b79497786367380f3a375b16c4bf85"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_recharge_service.py":{"size":22641,"mtime_ns":1783760938743438422,"hash":"a4a9377a8243e30dd7d6a8a175c68525009465fdebdeb01230849156dd8b59f4"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_maintenance.py":{"size":6563,"mtime_ns":1782695447503836332,"hash":"c34b79f5bcd004c0f6353922492883e4b08e5a6bc229f0265c9af850d235848b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_maintenance.py":{"size":7793,"mtime_ns":1782695447583143336,"hash":"79033735d527926ac082200de0b89a122c53db3cbdf5fb33e3cc69f74dd017f5"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_maintenance_service.py":{"size":23307,"mtime_ns":1783761151873696556,"hash":"0c7aa346d9879347d6a98c435fadc47873907ca0774147b69acf0d392e00e58b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_urea.py":{"size":5609,"mtime_ns":1782696196169930337,"hash":"71b7de2f90b3c7c732b59683e5cd4d858288121414a1ff2679c039299f5fb024"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/vehicle_urea.py":{"size":6696,"mtime_ns":1782696220189638136,"hash":"750ecae5cdcc857031e618b87ffa9b28607bd47e72ecf6dc7ebbe51003682df3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_vehicle_urea_service.py":{"size":19556,"mtime_ns":1782696213546483763,"hash":"03d389e791e5fac9a5339d1259d342952fced97712c3657e8f791426de32743b"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_decorator.py":{"size":5312,"mtime_ns":1782701254052728785,"hash":"e476146985da29ad8cb77064d10314470546a8a52f6026a75fdbadd3fee34288"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_infer.py":{"size":1767,"mtime_ns":1782699326717654441,"hash":"4346307abeb03020a7069f560556b9954cf50203efb6ac65b0a4b9644b6a9b2d"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/oper_log_context.py":{"size":868,"mtime_ns":1782699327268762002,"hash":"064c356f3f0fbabc454311445f02d375b965c2c055ddc51386d4dad50ac3337a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/core/redis_client.py":{"size":1691,"mtime_ns":1782790834895168051,"hash":"e5d84d7433ce745da7a37fb46dff5d5eb6ae027ef0efbf406da0c9c7fb6089ad"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/resource_snapshot.py":{"size":3823,"mtime_ns":1782793446819247296,"hash":"2d65c990d058d22010f8d4449652eb752c297a046b5d7b3ff6755c3e1cad0cf3"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_transport_resource_snapshot_service.py":{"size":4861,"mtime_ns":1782793450356380638,"hash":"6f94dcb582fe725738a54469e461aa0124b9754b2141cb78d3859ff1a2f25ca9"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/datetime_parse.py":{"size":929,"mtime_ns":1782905360746020898,"hash":"7a4eac85768cbeb0ba76f7f478ddadeeacab2498cd9be4070a76e1cfad693cdf"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/transport_address.py":{"size":2604,"mtime_ns":1782906539731495489,"hash":"6548b4b0c8c1d8096ce96ff1d5b523c67b12300f9a3eac66570b0256478a1120"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/transport_address.py":{"size":6875,"mtime_ns":1782907484528042124,"hash":"7880a37b53dc2e88534ca5750097792ee7e893c94d87bf1eecd8b6055fbba181"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/tasks/pl_cert_expiry.py":{"size":711,"mtime_ns":1783208067000967398,"hash":"7c02dbf83fad89c7da757965b545bf77f37792edd0d01d3ed320349b0b60a50b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_delivery_slip_template.sql":{"size":217,"mtime_ns":1783231586212866839,"hash":"e05e3fe7255e6c8a88aceb1aa53d743a4888a34c9fbaa4449c1cb8a275744d68"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_slip_template.sql":{"size":191,"mtime_ns":1783219958449266456,"hash":"e2a17c3df7be5cc0436ef979a48de81eecbe99c03f43662f4b0954a09dfa1305"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_template.sql":{"size":215,"mtime_ns":1783238744737524455,"hash":"24cf12e21f9f61f49c38e654c0ca655f56a21e5e2364e4c2ca4547dad583272e"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no.sql":{"size":203,"mtime_ns":1783240340132373787,"hash":"de9b3c8e1617b9c345b2d4005e4a627f10ded089db89d35f0b389b333b840c08"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no_format.sql":{"size":571,"mtime_ns":1783241697391655899,"hash":"61fc58ebda64c5d6be6bfd374dda99c7134e38dc89031527f71916625c4e36db"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_product_legal_use_cert_url.sql":{"size":1180,"mtime_ns":1783253793703960795,"hash":"01105ec581050477087d9bf65528cfe77ce0026d0fb682cba8014c4cdb046db7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/pl/menu_badge.py":{"size":247,"mtime_ns":1783257567212910729,"hash":"88c31e5ef8cee73327a1a0f36ea7ae0e61fa8f1ae140ad95ed0c0b9c2b4d05f7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/menu_badges.py":{"size":1203,"mtime_ns":1783257582921626135,"hash":"05dfdc446281abd9c3b273ebae2f9cbc4efe681fdc0ab288a77903e9e2bf83c7"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_menu_badge_service.py":{"size":6108,"mtime_ns":1783258109621359209,"hash":"aec342e2370f584c5ed0024bb08a8346c70e1827c09ab456b4b06e9dfc817d8c"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_bx_menu_names.sql":{"size":454,"mtime_ns":1783254856670799736,"hash":"d40ab4c556ab285498f4689c21736832deddc754a9a2b7d806e870ccb39fc9ae"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/seed_sys_menu.sql":{"size":82266,"mtime_ns":1784119136237565207,"hash":"e0c15f9bd4525b6e447a7e8da3aa6bf93c14c47a1b99dc5cb4bee9dfd1a60e8b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_menu_groups.sql":{"size":6367,"mtime_ns":1783256049450807031,"hash":"5f6964d1ea2712d3d72c8f43f08c16597d85fe79f3f54c8be99962090d6c2b67"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_pl_doc_reminder_menu_group.sql":{"size":1562,"mtime_ns":1783256051207137180,"hash":"82a0ce8c5293f5051967633c1c2e0a1dc60e1fc7c97919c9e0866246bbcbe3d1"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260711_hide_vehicle_urea_menus.sql":{"size":269,"mtime_ns":1783760394518896877,"hash":"a5f66647cdb4f0f403689b47b804f8099d7d710753823ef3ddc5e7a5a9ca4ca8"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_dibang_plan_quantity.py":{"size":4258,"mtime_ns":1783777759829460303,"hash":"6af8eb3c1f6c7ad34cd62f1e82e9c6b96737ffd48ba74dda7c5f888c55dd11cd"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_cert_required_service.py":{"size":10503,"mtime_ns":1783946967244318920,"hash":"07991890446a106b2d520e5e3c65e27af90c13d00945516ef1ce9bdf2e389879"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_type.sql":{"size":1662,"mtime_ns":1783843576747470605,"hash":"24fcd156f97e2bdf2bd158beb5358fe7159874783a84716c6c18d2565cc8ac1a"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_affiliation.sql":{"size":753,"mtime_ns":1783845019912997576,"hash":"6d450d264921f43c4e74ee4a2bcfc8335d16f77d9e0413267389741a92bf4eb5"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_add_finance_dept.sql":{"size":1697,"mtime_ns":1783855927743333340,"hash":"4ce457089ead5c063ae8e1a6d6553416deb43c54a7edddb574ee2572390aba99"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/setup_business_roles.py":{"size":14256,"mtime_ns":1783858477739135462,"hash":"ac12df2cf75826931c85f4deb3ae28614e31ea825d0beb3cf351a8d4f5cb1071"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260712_reset_sys_dept.sql":{"size":4517,"mtime_ns":1783855538627076795,"hash":"3795d6127a4dcf55d406be0fe673b8a83655723fe1f07b855e6fe45823d489fa"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_users.py":{"size":28602,"mtime_ns":1783855936414773748,"hash":"f5626fd3ca8bbc16275862080365c3ea2a27fd0f608e2243a284493762a8f735"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/verify_web_menu_codes.py":{"size":2535,"mtime_ns":1783858485781974173,"hash":"16c9c072b5b80fb309d56823963ebd0dd1f437a3f74d7f82711dd8a7c2de86d2"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/refresh_business_role_menus.py":{"size":3812,"mtime_ns":1783858483854587001,"hash":"b2c76109936791e1f624e239b24832237fa0256b38b98578e39825ac215fb166"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/renumber_crm_product_no.py":{"size":9071,"mtime_ns":1783861492796558653,"hash":"320c63801100ea8e9fb62abfb44b3487139377e293310593a877ab2d06e9d2e3"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_product.py":{"size":13287,"mtime_ns":1783860925852062495,"hash":"3e5dd462f2ad6218d2547b66db741132d0179037e6dd3ac24ddaa02a5b970d4b"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_product_category.py":{"size":15583,"mtime_ns":1783860690842141129,"hash":"9cbdfdf3335a366aebd0a605431b3952ea9aab26bd564d075d501479ae0b20f7"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/compare_dict_snapshots.py":{"size":11072,"mtime_ns":1783860128258640426,"hash":"cfc98cc72c5e387317cfa0a7670c47067fffe8f2e540d5cd580ee459e173e4ef"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_sys_oss.py":{"size":22858,"mtime_ns":1783885816251409459,"hash":"20f59e7e19a0c4415bdf17cef32a31db63220346688b3dbe06bc2c52a42d475c"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration/minio_url.py":{"size":4770,"mtime_ns":1783884947929403985,"hash":"54a1bf95512c0a8b5feeb518ea3af76983bb1b0a3ba645898b07debdb2cc52e9"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_customer.py":{"size":25235,"mtime_ns":1783886258025843303,"hash":"f30d5a50a28a1130325a9d9db88586bcae9e2a39434f077ded25f847af2ed66f"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_opportunity.py":{"size":23720,"mtime_ns":1783887271166904779,"hash":"f98964806f32c3020bdd7d644d930760d6ea3ad5162d5f1d6125494263dd5598"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_payment_invoice.py":{"size":13601,"mtime_ns":1783888353771580120,"hash":"c4af77164dac9ba4195c3d239c9679ea367b92f5f7500139f3b59547525af24e"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_clue.py":{"size":18423,"mtime_ns":1783887050391179085,"hash":"72b84e497176bc63264c26d891c591c839f9dd9788988043c5752413c1b62a09"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_bx_data.py":{"size":32783,"mtime_ns":1783888844450695833,"hash":"16751fcd542e209535216a0516d78b62eecb81732d7fe0f9ec051fdf811e93b6"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_contract.py":{"size":36188,"mtime_ns":1783888258230435217,"hash":"a6269c8eeff19f4ae8ff7d22a3544ebc4a1858aaecd59583e6afd140a7fa766e"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migrate_crm_quote.py":{"size":27580,"mtime_ns":1783887475224438064,"hash":"4ac389eb6cb7437d4f5e8203d9908efec9836046ce8628a5e4be1f8b8ddd52cd"},"/Users/zlwu/work/00code/shanxia2.0/backend/tests/test_pl_personnel_cert_required.py":{"size":2829,"mtime_ns":1783946968430310316,"hash":"e89b3aa798794dc77085af5c4b880cdddcd2c0590c3cc3414f8a5389fd5f6d93"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260713_pl_personnel_cert_split.sql":{"size":3436,"mtime_ns":1783946793684378982,"hash":"ce61899ec7e13f41de08dbc923dd1ff2a1a976603d13c8f09aa6fd5be9c914a2"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/api/pl/ocr.py":{"size":1889,"mtime_ns":1784035957225824939,"hash":"1de70651a8c1c9e0e208bdccb45d0b9c7e7a0f8f9a663941bdbd5ae278234b1a"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/services/pl_ocr_service.py":{"size":11166,"mtime_ns":1784036700055450000,"hash":"6f233150e253813a7c9da30e6e5d6046fdea01baa67c2589a332fe511ab795f9"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/test_aliyun_driving_license_ocr.py":{"size":5130,"mtime_ns":1784032210609057675,"hash":"13d43c9144c3795b8870fbd900ed14f97ae22ee043e2c265a5151525666abebe"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260714_pl_ocr_usage_month.sql":{"size":1270,"mtime_ns":1784032423540552834,"hash":"d7018a4e5be9760846731440be98e53584d8e1461fc4ea54a0c8db61c666e7fe"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/schemas/crm/price_letter.py":{"size":3994,"mtime_ns":1784122554297827011,"hash":"6cd75fdbbd6a2dc65cf0b0b29e6206910fbd86f8bedf05bb56a8835130b81829"},"/Users/zlwu/work/00code/shanxia2.0/backend/app/crud/crm/price_letter.py":{"size":13292,"mtime_ns":1784122560635390924,"hash":"1edbd17d41fcc4205faf15de5ce47aecc5459a39d06a920689379a65cdb9c3d9"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter.sql":{"size":11104,"mtime_ns":1784122573332360310,"hash":"548dab479fcde4bf1628ca2093fd7840720473a774a5289b55bfd4f46b902153"},"/Users/zlwu/work/00code/shanxia2.0/backend/venv.bak.broken/bin/Activate.ps1":{"size":8593,"mtime_ns":1780108930820914793,"hash":"ed2ea10761f2798e8980084d754284d3fcb94f1284ae7085c35c16108fe24846"},"/Users/zlwu/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter_bill_price.sql":{"size":901,"mtime_ns":1784122547991214820,"hash":"11a4eb6f3b4d89c1a5141bd9a85e931517984b77ac213f5842dc590f928fe1cf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/__init__.py":{"size":21,"mtime_ns":1780113982000000000,"hash":"60a04ff08fd97084e83ea809fd13feda6d2848be20ebf309e31fc1dad7523230"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/__init__.py":{"size":665,"mtime_ns":1780804649000000000,"hash":"f720195209c1783d8b2526220a086c2ae2769d76a12bd7df74136f5432c7b75f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/admin.py":{"size":50332,"mtime_ns":1785469147058813215,"hash":"b2038d923003b4b9c0545217d6f8077b811fe7d15881a56daaeb28eac3024538"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/__init__.py":{"size":827,"mtime_ns":1784980394000000000,"hash":"8bd7939017216a2b3c9ea7ed910167f7baf5c02cf724c10b392f6f286f6368a5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/advance.py":{"size":13404,"mtime_ns":1784992736000000000,"hash":"e09d555bad6b1a0ab289d045dda5a4231a54316e34616f60b03f724f9152e73c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/attachment.py":{"size":5758,"mtime_ns":1782790898000000000,"hash":"e88b9181e7c1a839074656ce2260cd6f693821402a24f08dd1c0ef3c160f8fa8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/expense_item.py":{"size":3362,"mtime_ns":1782650913000000000,"hash":"c6a142011870516822cf11cff16a86c56908f00680eb7c6219c8441c9b63632a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/payment.py":{"size":15715,"mtime_ns":1783745581000000000,"hash":"0d0b8823013a63f91baee0ea19b56f203e70fb1e450f873cfeb634a6cd017f54"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/reimburse.py":{"size":17764,"mtime_ns":1785473021311995564,"hash":"7bdd9f93c359800774b48c268d6ef56c6abcdc9ffbad3f50ddb71a88da506014"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/workflow.py":{"size":4984,"mtime_ns":1782650913000000000,"hash":"84285aab7499ce9280156c5814b2dc4fff42841803dd673cc6bfdc6eed498283"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm.py":{"size":151307,"mtime_ns":1785201644248461923,"hash":"c30d4eda6a95a713dd0598c5d4eb4163579510db58887ed8e74b489dcd6a4a7f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_routes.py":{"size":31366,"mtime_ns":1785582201623110512,"hash":"8dc61a9acfd6c688d60733291382cfee9712f600b370c4f6e7a5fc4c70e12f37"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_contract_sub_routes.py":{"size":25165,"mtime_ns":1782650354000000000,"hash":"b2733fd74cb7e6cbe6518fc5a5700e387601afc087be09f395f3c61372099847"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/crm_quote_routes.py":{"size":27413,"mtime_ns":1785582207627862716,"hash":"030260b446ad51a39654ee9bc869cc8904e07390d47447b0ce238888ba15316e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/__init__.py":{"size":544,"mtime_ns":1782011200000000000,"hash":"822060230e155b8704feb447b908c226d4c53e62b3e6df65c89dc3c7a0e6e07f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/dashboard.py":{"size":6576,"mtime_ns":1782651340000000000,"hash":"753703fbbe8ddc02d8fbdae78df4abd1448f5ce5878e2f0390111360fdc300b3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/inventory.py":{"size":16423,"mtime_ns":1783156035000000000,"hash":"901602a8fe362aec9b89ac6f2ee578f1eeb105fcf12a1a6c3ff4ef98f4ad1ef3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/plans.py":{"size":17098,"mtime_ns":1783156035000000000,"hash":"bd2c8344e2ab765ceb2a2c91f5cf2facea319ae66c9097f5468a7f5d753b67dd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/public_inventory.py":{"size":6968,"mtime_ns":1782790898000000000,"hash":"79aa205d2e5e89ed45dd7b95068b93e3f6db82ee9258b0331b21d6c8ab551582"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/db/weighing.py":{"size":14940,"mtime_ns":1782687688000000000,"hash":"71d143eb05d0d3f785f5962892bde64dee3c2937139c975b52af62628f308d46"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/leave.py":{"size":6916,"mtime_ns":1782790854000000000,"hash":"6e03239433bbaecc54f72fa2aba2578573ae6c7fc881f287ef57dafed1a0f1b5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/menu.py":{"size":30932,"mtime_ns":1782790854000000000,"hash":"4e9de047e67ff365d17ac28d30e1baa72cfa3c651caa1b9776e225fc07da0e58"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/monitor.py":{"size":2789,"mtime_ns":1782790854000000000,"hash":"5c13164e49d7ecb6836cf8e65a705fccd518399b85d3be2318c9581a98bacd51"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/__init__.py":{"size":1401,"mtime_ns":1784428053000000000,"hash":"dea849a84ab13ec8daf7782c055f04682fb763bbfd2f184e37ace15312421905"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/base_data.py":{"size":32882,"mtime_ns":1784993134000000000,"hash":"1bfeff4b19b3e8020c12c31e337f4d5131170fdb3974bf3593f3bb77de10ddc1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/freight.py":{"size":10543,"mtime_ns":1783760751000000000,"hash":"2d64ca83553dbfc928887171941761114c5db012b9c4a01d34e2b522902bac38"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/inventory.py":{"size":13443,"mtime_ns":1785202430756770222,"hash":"b14a59968214a71d272cc6fbfc2555a9ea39eb8174697a75bec673bdfda1b074"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/io_order.py":{"size":12552,"mtime_ns":1785484571840900864,"hash":"c1508e2c882a86f5dc3982e2262762704a0c6ec3f15cbbca688e51ccefa6a4c4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/menu_badges.py":{"size":1203,"mtime_ns":1783257582000000000,"hash":"05dfdc446281abd9c3b273ebae2f9cbc4efe681fdc0ab288a77903e9e2bf83c7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/ocr.py":{"size":1889,"mtime_ns":1784035957000000000,"hash":"1de70651a8c1c9e0e208bdccb45d0b9c7e7a0f8f9a663941bdbd5ae278234b1a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/plan.py":{"size":53516,"mtime_ns":1785453587549056220,"hash":"129c2d09968a90f83cb86001cb3f95174a1b322857e3dc7e69b80d4fb9c93ed3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/public_io_order.py":{"size":6947,"mtime_ns":1785446228430209460,"hash":"74ac18f644a2fb5454714b0c26e4efb4f2838cbb579c3771ab3727b4ce7471ad"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/public_site.py":{"size":9607,"mtime_ns":1785451214459593031,"hash":"c9d7d58d5f52fbc38c57a35db878499e9007a23579ca4afcc1b23e9d89574f93"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/public_transport.py":{"size":14689,"mtime_ns":1785451206327142197,"hash":"93ae31a9c31bb9d67b9b5bdb62c367a18b497fe10a48508a5d1ef13f02b3ba2d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/transport.py":{"size":35018,"mtime_ns":1785447176422326611,"hash":"ef6de0a2d4639df270b33474966feb66b1366109bdf984062d0187b22189ed43"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/transport_address.py":{"size":6737,"mtime_ns":1784993134000000000,"hash":"e7cc69318bb266a6fb28a9e8163b16e459b879e6041b226d9870477d3bf1c378"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/vehicle_maintenance.py":{"size":7793,"mtime_ns":1782695447000000000,"hash":"79033735d527926ac082200de0b89a122c53db3cbdf5fb33e3cc69f74dd017f5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/vehicle_recharge.py":{"size":8824,"mtime_ns":1782693867000000000,"hash":"f084b6fb3e80de0455ee9cfcc857ae5814b79497786367380f3a375b16c4bf85"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/pl/vehicle_urea.py":{"size":6696,"mtime_ns":1782696220000000000,"hash":"750ecae5cdcc857031e618b87ffa9b28607bd47e72ecf6dc7ebbe51003682df3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/public.py":{"size":12682,"mtime_ns":1783858998000000000,"hash":"b98ac3f3bc95c2b42c481ac9ae9137528e55845d425e5d2184827dc424304e42"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/workflow.py":{"size":21202,"mtime_ns":1782790854000000000,"hash":"3950dd8d9855f5ed33a0e15883f7e442c4e26bc51672209b1e68ce0d0c9ce399"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/__init__.py":{"size":61,"mtime_ns":1780108930000000000,"hash":"3dd1842ee59b0c804176b03b4b8a323bd4a252b7feb1bbc32db64f3a8928570e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/admin_request_json.py":{"size":2669,"mtime_ns":1780108930000000000,"hash":"4f68b3cf84291e7bddad6ecf4bb4d29ca5e1ec246a9f7f9c4cf5909d0ec1174a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/api_crypto.py":{"size":1870,"mtime_ns":1780108930000000000,"hash":"c04b748aea86890a5971f749523c7b17dbad1ddd6f9f7f07a5679d159c984e33"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/api_crypto_middleware.py":{"size":10876,"mtime_ns":1782790001000000000,"hash":"b39f128b6612589ea6ac5babd30752e9585b3af07b82bb1ad53c9e3c0d90816f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/api_request_log_middleware.py":{"size":11971,"mtime_ns":1782701669000000000,"hash":"0b84c32828939e6102bb3647691fa8f04b1f68e0e0e9f28127374cc44e19a11c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/attachment_biz.py":{"size":1122,"mtime_ns":1782219602000000000,"hash":"fb9fea8983524e3891357016b6546d982c4a82cb782fc01425f70472d4338b6b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/auth.py":{"size":7457,"mtime_ns":1782790841000000000,"hash":"34bac56e1c2cb6215f4b5fa2dc32d77d4b4abca51428819eebf4afd269cc51cf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/bx_auth.py":{"size":1473,"mtime_ns":1782650780000000000,"hash":"678d9ff99b5c89575ef47e5c9e61d495f364917fd6cfb2b322c4d5035d3ba359"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/config.py":{"size":7267,"mtime_ns":1785592475563320549,"hash":"bcca3bde37f41523158b4f083c56cf4c37e03d218bb9f1ce51e2a55d7fce1807"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/context.py":{"size":421,"mtime_ns":1780108930000000000,"hash":"83a10aee67162374993c10a30bf8bb8bd9c4b35cf48f42c832415ccebd91660f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/data_scope.py":{"size":8432,"mtime_ns":1784993108000000000,"hash":"16fd3ff8a3dde7397d55829d83c8541f6cbfb11145bfa8f2ae4e28fcaf4e2f60"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/database.py":{"size":1510,"mtime_ns":1782790847000000000,"hash":"8bc9c8ae62e2be2c6920036582ba448dfcd1711c41cebb62274ff6bc6ee14b0b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/db_auth.py":{"size":2500,"mtime_ns":1782790853000000000,"hash":"4988b71d4e54b326c333872b34743914d67b15fb753c1b0231e9b00b366458a4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/db_collation.py":{"size":548,"mtime_ns":1780108930000000000,"hash":"0c680e25a18244ca839a7de6ed1f4313b33bc8da118d89c463aee1b6af00c6f9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/delete_guard.py":{"size":3572,"mtime_ns":1782687610000000000,"hash":"223d91c51a1677b6a4b7802d5571af14d5cda8bc45e4e757b1f2150990a69bce"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/exceptions.py":{"size":4946,"mtime_ns":1780108930000000000,"hash":"79c997d964bca1a4f12f2b92fb1f181fdb9e2b3cf72eae39f4cc164d23794fd7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/login_crypto.py":{"size":3858,"mtime_ns":1780108930000000000,"hash":"b82d51afabf2293a9cb1fb2e5f994c383948e7f47ea95fe674686b4f3f3342b1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/menu_guard.py":{"size":1611,"mtime_ns":1780108930000000000,"hash":"3e26077288c3620a4780038b891a326206b45bffe00aca545bdae30172487235"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/oper_log_context.py":{"size":868,"mtime_ns":1782699327000000000,"hash":"064c356f3f0fbabc454311445f02d375b965c2c055ddc51386d4dad50ac3337a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/oper_log_decorator.py":{"size":5312,"mtime_ns":1782701254000000000,"hash":"e476146985da29ad8cb77064d10314470546a8a52f6026a75fdbadd3fee34288"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/oper_log_infer.py":{"size":1767,"mtime_ns":1782699326000000000,"hash":"4346307abeb03020a7069f560556b9954cf50203efb6ac65b0a4b9644b6a9b2d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/order_status_compat.py":{"size":2828,"mtime_ns":1780108930000000000,"hash":"5349e5a0745ee6734c4a995337779307adefc46f453906171988a77de2081540"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/redis_client.py":{"size":1691,"mtime_ns":1782790834000000000,"hash":"e5d84d7433ce745da7a37fb46dff5d5eb6ae027ef0efbf406da0c9c7fb6089ad"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/request_payload.py":{"size":2842,"mtime_ns":1780108930000000000,"hash":"e9937151530ab1417ef297aef59111977725cf90be2a8fa76c00a0618789aba0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/response.py":{"size":1824,"mtime_ns":1780108930000000000,"hash":"f1739352d65ea8287d76e282a59553aa8d63c97e35764c64ac378aa5bd9c347e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/security.py":{"size":728,"mtime_ns":1780108930000000000,"hash":"df0f01115064f7b8de1c81dbe9a6db39360c236610b68c33b3234a51d7f0025b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/storage.py":{"size":15223,"mtime_ns":1785592482382775449,"hash":"f3dde2ec4a7cabd674c24ca7e6735ebbdf48b071c014737e1da1aa38902559ac"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/tenant_context.py":{"size":693,"mtime_ns":1780201410000000000,"hash":"0a810658d894d35b9e981faa1448e1d02d617ecbe563bd711f6ce5a8f9db1861"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/utils.py":{"size":1498,"mtime_ns":1780108930000000000,"hash":"09323693661c1d4560458b86a954128ccff82bbaf6522da0b44f24da99ddf9ea"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/wechat_message.py":{"size":11194,"mtime_ns":1780108930000000000,"hash":"5086070deb14d99d1a69e419b2299ec4ea2fe128de80fe321b0c3c531fea7a88"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/core/wechat_pay.py":{"size":23585,"mtime_ns":1780108930000000000,"hash":"3d52265ce65d21e7103f94afa1e8547aee0823b5ea6d65c50317436ac81fb4fc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/__init__.py":{"size":169,"mtime_ns":1780108930000000000,"hash":"340e3c08174d61829012879e684f6166803b88c819c58b54a16a11d210dea85e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/api_request_log.py":{"size":4562,"mtime_ns":1782699354000000000,"hash":"f233bde579c4f6c7f2fd6030878c5946fb5dd5e247efaf4fe80d3f48622c19a8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/base.py":{"size":5360,"mtime_ns":1780108930000000000,"hash":"49fdea023825ea249923b1cb02d353dcede1850158d3555a2082887925e69b9b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/biz_no_generator.py":{"size":2534,"mtime_ns":1780108930000000000,"hash":"e6bd375987e47f6ee80294686db64377938a286767bb28324f3eda2ad39ad546"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/__init__.py":{"size":0,"mtime_ns":1780201410000000000,"hash":"9b8fcaaabdc85883c9ef392b596b60db0bd3b2f1623fc8012e55003f234a9875"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/clue.py":{"size":25820,"mtime_ns":1783155705000000000,"hash":"3526af7e7e79d505911690355890ccdb3a1c30d302534ffdc8626a454cc2499b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/clue_follow.py":{"size":8493,"mtime_ns":1782687674000000000,"hash":"54881f876d1842ee4a344d049ea4b5bac18b243535338077cb3eb3ec8b60e9c1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/clue_statistics.py":{"size":11229,"mtime_ns":1782649305000000000,"hash":"fbc3b4f3356256787839cc5b2a6f8dff41dcf9eb27c791e427e816e3ba14e094"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contact.py":{"size":10482,"mtime_ns":1782687664000000000,"hash":"f4e3a684dd7a6c7c927e10e8e1e0c108c151b963777b85c5b74d7e7871f3a438"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract.py":{"size":91149,"mtime_ns":1785479747157279521,"hash":"2331b1347e35b0b2229f8ad2937ca2a01891c014cfb67e61f5fec170910c6cf7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract_approval.py":{"size":13958,"mtime_ns":1780763324000000000,"hash":"3d7fbbb90728568a2577e52d8986ccbec8f599d04a0ef9e330939d1fe729bc98"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract_product.py":{"size":13694,"mtime_ns":1785201816045624515,"hash":"065d84b86eae1b304ba84b48f5a77de89b4fef14fe714a61b31343c531887e1a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/customer.py":{"size":23825,"mtime_ns":1782687664000000000,"hash":"5d8934ae6318de87b0761686fe491a7ec2be02792a85d84308c383af3193fa8a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/customer_follow.py":{"size":8121,"mtime_ns":1782687665000000000,"hash":"ec67fc7667847017a8d8b5a276f5c75328bda7fa360746d80c7890de3f6d4b76"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/customer_pool.py":{"size":3725,"mtime_ns":1780202237000000000,"hash":"0f26ac2bcb585241f25302787184db4db422934e5d896ca25bbe7efaf61d92c4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/data_scope_helpers.py":{"size":3358,"mtime_ns":1782650085000000000,"hash":"b0aab03bc7b3afb2faf39410e9881b65e6a2eeecba592d1655b5b9359fb4dbdd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/invoice_info.py":{"size":7446,"mtime_ns":1782687666000000000,"hash":"e0f2069c43cd272e5f061d30b47a42140ac37aa26379985fc781f8a3851aa44d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/opportunity.py":{"size":42231,"mtime_ns":1782687666000000000,"hash":"75f54438002e070076fe37ec2211c5fd67bf4aebd2607ac94db15e30d6f634d8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_follow.py":{"size":10069,"mtime_ns":1783821986000000000,"hash":"06c9f3deab3472b20429c12a618ae2d4d6efd3afa2353ac44cd52651a596af4c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/opportunity_product.py":{"size":10346,"mtime_ns":1782687669000000000,"hash":"40b497a41ce4003e128dc305abedc54e01dbaad8a8f7bc1ecec1662a3953a1ed"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/pool_rule.py":{"size":8816,"mtime_ns":1782687680000000000,"hash":"779f7f46e7ef8bfba27390d56fa071dfd3a8446d9d3b3361003b1c239f7169aa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/price_letter.py":{"size":13292,"mtime_ns":1784122560000000000,"hash":"1edbd17d41fcc4205faf15de5ce47aecc5459a39d06a920689379a65cdb9c3d9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/product.py":{"size":36160,"mtime_ns":1785201638941484735,"hash":"df41e8fcb843c01997f813fa5584efde9f118c607ef434e072f1b46ea1f231b6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote.py":{"size":48769,"mtime_ns":1784996795000000000,"hash":"dc5215156270917090fb404c6f7455b48617e9554305fdc4c66fe70f0befe423"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_approval.py":{"size":8816,"mtime_ns":1782650314000000000,"hash":"736353b8c2c5073d260e007a166234bd7d57958bcc738c56a1d39cfb22381180"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_product.py":{"size":13183,"mtime_ns":1785201813742913960,"hash":"20f79ad1a386d9f3d5192d154132b799380e754778f98cf5c940a782626fc8bd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_share_log.py":{"size":4277,"mtime_ns":1782650254000000000,"hash":"5bfbf7ce2918f9ecdbbca6fdce17d200cd52cdc71b2dfb44ac126a36ca0ed734"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/statistics.py":{"size":5642,"mtime_ns":1782649310000000000,"hash":"f954dc5479f42a52fdb3f05ad9076fdbe43e569bae85299fca6c8f37c7323cde"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/supplier_info.py":{"size":7182,"mtime_ns":1784996460000000000,"hash":"2c244898e16084f533aa42a0a3b45106a99515ebf627d37557b22549fd1f0035"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/dept.py":{"size":6593,"mtime_ns":1784993073000000000,"hash":"a636f1c45bd0dd0b2e6c337061f3d1ce4119b130d444d6b31bf7f1be4782fa67"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/dict_data.py":{"size":5379,"mtime_ns":1784993069000000000,"hash":"750a883eb752a96e26f22267171a941345201afa9d2ff243c4c4569d02a735ea"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/dict_type.py":{"size":5456,"mtime_ns":1784993071000000000,"hash":"d7f64d813e31ed3751b6399245ba502f953644569c75dce0a98598d38b0efde2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/ethnic.py":{"size":961,"mtime_ns":1784993074000000000,"hash":"ba2c043bc078010880031293f6e2f0f01e9b820d191ff6989bf65983903f063c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/leave.py":{"size":4765,"mtime_ns":1782687678000000000,"hash":"847095009bddac2d77dcbb485bcc57cbe168ff874989c197f49f2a28675d2525"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/menu.py":{"size":7600,"mtime_ns":1782688282000000000,"hash":"36951a77088782d80500bfa6266b46a564a670e10b70af7a28cdee8c50741098"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/monitor/__init__.py":{"size":1,"mtime_ns":1780242127000000000,"hash":"0592c62ce1172d93aca98cbd9aaa54b9c2668022abf3581249516472db312293"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/monitor/oper_log.py":{"size":6673,"mtime_ns":1782699352000000000,"hash":"0586702734f693ee099af38d407c71cc0a840153f93174699c5a5201e0a9acbe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/oss.py":{"size":2688,"mtime_ns":1785469127578334497,"hash":"88d704b7041a2ae458860c7a93357cff50bc5a8164939151326c22266f300487"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/post.py":{"size":5081,"mtime_ns":1784993075000000000,"hash":"12619e8ae3e341e757e8696459241924d761161a629b2804d0e1c3611b4d6a67"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/role.py":{"size":9417,"mtime_ns":1782688282000000000,"hash":"008550fe8efce5310afd3d41d944cee4b68d71763a587583f8832855480477f7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/sample_code.py":{"size":12322,"mtime_ns":1780114002000000000,"hash":"5b74838b3920f9182d092f8a1b721697f1a62e8b90728b9f54101dbb96baa40e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/site.py":{"size":6442,"mtime_ns":1784993075000000000,"hash":"a5f9e5ab9008186c0001c480bd702e6217946eedc17b2e35eb25ad06edcfccca"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/tenant.py":{"size":5659,"mtime_ns":1782688281000000000,"hash":"0192db8ac9c3de42fe8ee58324c77111e152bf4c35fd15c0b16467fe243712f0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/user.py":{"size":14214,"mtime_ns":1783851628000000000,"hash":"aeac623e3020fee4cdd01e463ced23e4e03539a17c5b57dcbd9d88aac5a4fb4f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/workflow.py":{"size":25052,"mtime_ns":1782688290000000000,"hash":"6ca7e3b79e91356a050592b768d7a6749e1bfdb2841a208c7235899603368aec"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/main.py":{"size":6588,"mtime_ns":1784428054000000000,"hash":"5fb1824a47d8362c5b98661559be23282c31c1b3dbedc4a89da42df6ec610b1f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/__init__.py":{"size":2508,"mtime_ns":1785445893850945734,"hash":"c6482a76c0273e7916ac15991de22851a53c3c20cfa922a6431e26cbdc4164aa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/base.py":{"size":2090,"mtime_ns":1780108930000000000,"hash":"fda71bbe87dcb29c6f0ffa9337e9f39c2c06d912df6cb75d521f0e87c7c73c6d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/bx_models.py":{"size":22196,"mtime_ns":1785472986385441979,"hash":"7027faa05ebc02388df5ac563561a826f3b107a9c55d927da60cf4ef85327d9e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/crm_models.py":{"size":71968,"mtime_ns":1785561859218571928,"hash":"d78d1ed8e2b0a0b4bc3bad72c962836de29ea0c16054069859517eb4ca910f18"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/db_models.py":{"size":8110,"mtime_ns":1782219570000000000,"hash":"249bb0971c263436095a6324457557b6ac5cfc3ca5ac9bc9499a9b4cd21d42bf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/models.py":{"size":36012,"mtime_ns":1782699345000000000,"hash":"01f974f182660ec4f215bcacc31eddadd7899d60d95aa19a61046579a994512a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/models/pl_models.py":{"size":77415,"mtime_ns":1785445911238805668,"hash":"723076b8d3f0c040c205fd161b87bc2d3457b2322452ce8b2547ad24ed7e645d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/__init__.py":{"size":1159,"mtime_ns":1780112973000000000,"hash":"4e8b0bda6680e2c8740c380b96eedb859ddc584a81bad568a18ba6beb001e480"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/attachment.py":{"size":328,"mtime_ns":1780108930000000000,"hash":"300b74c51c66cb0fbf8c9f4d84a4b7bf29dcc9b6a67d922f8e1d0df05f9fc5bf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/auth.py":{"size":1315,"mtime_ns":1780108930000000000,"hash":"018b82e42bbb055250549c54ba700ee01cf28cd753397d6c162f9e60185908e5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/__init__.py":{"size":81,"mtime_ns":1780750556000000000,"hash":"07c3422f745afbff1c8162b3782fbb4b8de65084e7e9bbcf45abb9d433d65f98"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/advance.py":{"size":4603,"mtime_ns":1782688296000000000,"hash":"74b6e8bf6906518f80f16f218f1af74d2c356a6f392a4e8a69466f4179ce0b92"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/attachment.py":{"size":525,"mtime_ns":1780750871000000000,"hash":"f287214c72345e41d9d122ca55b4d3e279635d99cbf10ed530de0ac32374f31c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/common.py":{"size":1547,"mtime_ns":1782003187000000000,"hash":"a75ca6a0d92f93408eee00cc5053206d28a545512e4cd0f186be9e00e3346ab1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/expense_item.py":{"size":1668,"mtime_ns":1782688293000000000,"hash":"ac07c7b05fe990e743dd5b4e96a85b59431479ca11b98cce7c340a93dbe99ce1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/reimburse.py":{"size":7641,"mtime_ns":1785473904076010280,"hash":"9e3bd83e926020fbcdc81264afa766f63a27d71d7c71e772d581b5d4019d82ac"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/workflow.py":{"size":1677,"mtime_ns":1782688293000000000,"hash":"f683e5bb7a45d0bae3b3f262c201453155eaaaf2c8d7f14f567a14295a68d2e1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/common.py":{"size":555,"mtime_ns":1780108930000000000,"hash":"caa0c03398e54017b25cca2a16cf8d232a59739893a16e4c33b51a5316d8964f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/__init__.py":{"size":0,"mtime_ns":1780201410000000000,"hash":"a6d57250b43cbdecb56b7a9d55d29642b808be368733e14b7df2bd196f54d64d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/clue.py":{"size":9417,"mtime_ns":1780215022000000000,"hash":"2676afaecac4bb6da185674a9421dfbd40834ca21520adf66bb6b175fb728677"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/contact.py":{"size":4856,"mtime_ns":1780742840000000000,"hash":"60c714cc254d70f39b43205bbcb7fb4c563e807ddd070eefaaa952ae96048377"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/contract.py":{"size":10671,"mtime_ns":1785418059662177093,"hash":"be3c4f394aa2ee009515127647c54bad54936d9f6c1ecd36e391efae192b6960"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/customer.py":{"size":13811,"mtime_ns":1783823672000000000,"hash":"b91167282158aeb11046dccc4bf2f29a13307a0413b3d7b3c860b17d37f8ad4a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/customer_follow.py":{"size":3716,"mtime_ns":1780201410000000000,"hash":"3979cecd62a4f2ee5dd925639572208e36b397620d91a9ce49a59adfcb2a9d55"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/customer_pool.py":{"size":1340,"mtime_ns":1780202198000000000,"hash":"7a6b76e0e39ada0783dfbee92280e9f06299b6662b08abb13ab1b0d9c70fe370"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/invoice_info.py":{"size":3104,"mtime_ns":1780406386000000000,"hash":"a59df3aed2c976904e3b5325fedd1621435b322645aa71349f3356e0cdc17424"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/opportunity.py":{"size":9391,"mtime_ns":1780242127000000000,"hash":"2e068961824a1d3ec0da0a94a3c494b63582b3251e5f4e030ce3e12897e85002"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/pool_rule.py":{"size":1848,"mtime_ns":1780202212000000000,"hash":"b0331e17e801d206fba2fa89df1a66d1758d850dc5547e076218e16c8211a3e8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/price_letter.py":{"size":3994,"mtime_ns":1784122554000000000,"hash":"6cd75fdbbd6a2dc65cf0b0b29e6206910fbd86f8bedf05bb56a8835130b81829"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/product.py":{"size":9514,"mtime_ns":1785201684922273556,"hash":"f4b9b55d1a4e43b9d09c2193095223a922b97224baa660817c8b5fc5647985f6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/quote.py":{"size":6173,"mtime_ns":1785418147320158849,"hash":"36361e9100bbaea5768c3428c2adca7a5393e51915400fdc71e9a6b4a2ad9c9f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/statistics.py":{"size":412,"mtime_ns":1780201410000000000,"hash":"fb1957d0fe87f22c37ba5bdaa5f3bf2bb4a40685a21a05dce98326581bb4844b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/supplier_info.py":{"size":4149,"mtime_ns":1784996454000000000,"hash":"25bc81362d6365c8bd852892890f3ff0c74fd702016cb21104c3bdfa51e2f858"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/__init__.py":{"size":84,"mtime_ns":1780804619000000000,"hash":"5193d61f7204f825551f083e79722805fb2abfd953bb552e80950bb3ff9784a1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/dashboard.py":{"size":514,"mtime_ns":1780804990000000000,"hash":"f2c1b1014d0d769abf32dab3783de65fe7fe327c956ffbfe44adce94542f8892"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/inventory.py":{"size":3948,"mtime_ns":1782219604000000000,"hash":"19ea80e59a1309518ad6183a6b0b8751401f4724d7b5101d47defc2417ec36c8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/plans.py":{"size":4876,"mtime_ns":1780935329000000000,"hash":"474cb68905249cd5a6237443a412d49cb28af2e0cec61c9bf5c34ec54db1240a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/public_inventory.py":{"size":1492,"mtime_ns":1783211660000000000,"hash":"ed4e21307ac463410d296a2f8cf53f8e0429187344537bcf1e1212a7affa06a6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/db/weighing.py":{"size":5347,"mtime_ns":1780935341000000000,"hash":"f734c66269b713a840d7ce6c1c6150bd2dc00b114b09963362202d119c82301e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/leave.py":{"size":1449,"mtime_ns":1780108930000000000,"hash":"c54098a69bd4490290dd8d7809ed8764a3f38e8c38692eeef2b505293cdfaeb8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/menu.py":{"size":816,"mtime_ns":1780108930000000000,"hash":"17e35f2d7bf95cac00d81357f69fdcbe849e855daa05570c3302de8182b4df11"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/monitor/__init__.py":{"size":1,"mtime_ns":1780242127000000000,"hash":"bb5b318d3cb224c50a2e0286e145f89ea7278437437fd17d7c865d67ad148076"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/monitor/operlog.py":{"size":1069,"mtime_ns":1782699353000000000,"hash":"b9f0a382f8990f69391b26bb75b4538d141d6adadc4260fecaa8b33cb44c063d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/__init__.py":{"size":5012,"mtime_ns":1783242582000000000,"hash":"1dced39f250919efc4aa798daee1efef3adcca054c7483843536c455919ff106"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/base_data.py":{"size":17829,"mtime_ns":1784957273000000000,"hash":"3d51d0a0f2f54dc44f2f987171b9f84439be3c07cfd044c2ebe5c87f41b977b2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/datetime_parse.py":{"size":929,"mtime_ns":1782905360000000000,"hash":"7a4eac85768cbeb0ba76f7f478ddadeeacab2498cd9be4070a76e1cfad693cdf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/freight.py":{"size":11299,"mtime_ns":1785439224271183303,"hash":"ba898caafbe6c8f4c5729c2521917eeaf92fa3c649626232d326eb255f0c177f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/inventory.py":{"size":8319,"mtime_ns":1785202429973819450,"hash":"63ec5922aa1e9bdf8c3b7dfc5b0ccb555535cbf949e32a1055237ba86faaa146"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/io_order.py":{"size":5908,"mtime_ns":1785450376207250209,"hash":"eb0ebe1400d6d0f7fd614561986c6f5d2072946e459c90b06761f0754a0a482b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/menu_badge.py":{"size":247,"mtime_ns":1783257567000000000,"hash":"88c31e5ef8cee73327a1a0f36ea7ae0e61fa8f1ae140ad95ed0c0b9c2b4d05f7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/plan.py":{"size":23874,"mtime_ns":1785453577889781284,"hash":"346dd41170ff374014149c5b4e0f442e58040200b17dc69b20d05f18fe235a59"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/resource_snapshot.py":{"size":3823,"mtime_ns":1782793446000000000,"hash":"2d65c990d058d22010f8d4449652eb752c297a046b5d7b3ff6755c3e1cad0cf3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/transport.py":{"size":20802,"mtime_ns":1785451180420705219,"hash":"ae069b93e5dca487543132014dab26c9a57ab6c714c3613d3e8527b589fff282"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/transport_address.py":{"size":2604,"mtime_ns":1782906539000000000,"hash":"6548b4b0c8c1d8096ce96ff1d5b523c67b12300f9a3eac66570b0256478a1120"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_maintenance.py":{"size":6563,"mtime_ns":1782695447000000000,"hash":"c34b79f5bcd004c0f6353922492883e4b08e5a6bc229f0265c9af850d235848b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_recharge.py":{"size":6299,"mtime_ns":1782694169000000000,"hash":"4d5ab880c0c3ca91b485e1ba53725005b9f89fe205780d58a738c861dbb7e6f8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/vehicle_urea.py":{"size":5609,"mtime_ns":1782696196000000000,"hash":"71b7de2f90b3c7c732b59683e5cd4d858288121414a1ff2679c039299f5fb024"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/user.py":{"size":1911,"mtime_ns":1780108930000000000,"hash":"3d3c159018cab6ed1cd3de7034ffb1fe77a272b9099901a1882d07aa15fc90a0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/workflow.py":{"size":3949,"mtime_ns":1780108930000000000,"hash":"e5aed7afcf903c838a35cdaf2230a93d221c63f5c6baa1497e455afac8587a9a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/__init__.py":{"size":34,"mtime_ns":1780750594000000000,"hash":"583b12a6d2c9fd4411b652741e73324df9256138946ee873a0ed03169f8dae2a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/advance.py":{"size":24037,"mtime_ns":1783746967000000000,"hash":"4834348d099b32b70d14e1b56279dbb385f42519646351d8cb220da8c5fe27f1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/approval_cycle.py":{"size":1296,"mtime_ns":1780758200000000000,"hash":"308c087d94ac253bfc7e2d5455a06ae8ceac034adda41b5c61dd315dc167efaf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/attachment.py":{"size":4582,"mtime_ns":1782650868000000000,"hash":"3a6480cd051bd1af733a67e5babcd64f3f74cbe230d72364b599cde8b0c67a5f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/base.py":{"size":3984,"mtime_ns":1784993089000000000,"hash":"dd56d9197b4cddc60570bf5eb1851d4a426ab226858beb95bccb33a839471ea5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/expense_item.py":{"size":4639,"mtime_ns":1784993106000000000,"hash":"2640940d1851d60e7ba515d759a0aa06843b764742ae1ea2fabb95b6a16136f9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/reimburse.py":{"size":50167,"mtime_ns":1785473904076135989,"hash":"62aa40e704008af56df7fd19b786de94d291218976106b1c59ee2b2332639b5b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/storage.py":{"size":3641,"mtime_ns":1785592485641970007,"hash":"9d8b58b75789fcdb58745877c28b5d961f68f134496e63057f8f54c51641bb63"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/workflow.py":{"size":5617,"mtime_ns":1784993093000000000,"hash":"514ea42e366fff44f1becbde6b5bfa219a224517e47dcdec25c8cf803a3ec0b5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx_data_scope.py":{"size":2394,"mtime_ns":1782650938000000000,"hash":"1e8e1dbdcf4bc68c2e30b99015e930bb9522bd1f633e95604ec6a62bdb2b43f3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_quote_pdf.py":{"size":9877,"mtime_ns":1780242127000000000,"hash":"fec04892fccccc3601fbeb012c92c77110496910be44102de40b4610148fa58a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/__init__.py":{"size":0,"mtime_ns":1780805614000000000,"hash":"2cb780fb722e6dbf2ecea6f6fc19345fb453e1a3c40694ba0ff7465eb7cf7d33"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/auto_generate_plans.py":{"size":4699,"mtime_ns":1780935400000000000,"hash":"d0760cb8155d60e18040bcf6fe41e6964640a3dffd6f4b7bb68678c9f31ab29a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/inventory_id.py":{"size":2574,"mtime_ns":1780934632000000000,"hash":"c5269cbb273d987c296143b83f1287762ce67d7ddeccfb0a72bc70234bad9f12"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/mappers.py":{"size":6955,"mtime_ns":1782219619000000000,"hash":"b9e97f66a0a248d06c2f960c3f5ac4fb3369cc976c16709227dee0cc1513d221"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/plan_helpers.py":{"size":386,"mtime_ns":1780805092000000000,"hash":"5c6ec7612b204e1dcb65c5daf03fa7f8ffa7710cd1ace63be4f7ca00cbf318b8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/product_helpers.py":{"size":2106,"mtime_ns":1780935268000000000,"hash":"cea6b0697eb64081a79d18ab95f0f0477714505a7aef82a41672197b15fc8b14"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db/weighing_logic.py":{"size":4110,"mtime_ns":1780804818000000000,"hash":"468ded88a0a4a397a96884580c88c59291c0b6effa897f08f1b3fea7857f9191"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/db_data_scope.py":{"size":796,"mtime_ns":1782651142000000000,"hash":"ad4e206ae53e25247ebb004e0ef586077a6e7df0eac7b14973c26b186cffb2eb"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_carrier_service.py":{"size":1735,"mtime_ns":1784957286000000000,"hash":"7ab4f5c5a28b0af2c8ddfc91bbc425a9fc5246956afdfd29ae4ca0af32d73cb6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_cert_required_service.py":{"size":10601,"mtime_ns":1784947515000000000,"hash":"a98e229da05d7245b06701f3a166dd30f15a28d117b4389ecb8f03bb6d9d0851"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_cert_service.py":{"size":7694,"mtime_ns":1783849439000000000,"hash":"7bb0a6d4dfdb1ec11e72e971873791b8e188939e7c6b7328a0a2f4f8986c9d1c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_data_scope.py":{"size":801,"mtime_ns":1782650506000000000,"hash":"0f0275c56a43603e69a030dd1d284cfc7982a7636423cfff6d0e692eb4631cb1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_dibang_bridge_service.py":{"size":15310,"mtime_ns":1783777749000000000,"hash":"c506eb84c104ce63b98cde5b16644f16ddcf4e3aa335089bedcb4c267d21fc0d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_freight_settlement_service.py":{"size":47560,"mtime_ns":1783213204000000000,"hash":"53a61d4da0cd2e2d0bac74abcca13de3f3d506b603453811d8f1cd53fa50b358"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_inventory_link_read.py":{"size":782,"mtime_ns":1782225276000000000,"hash":"6471dfc9a1fbe66223f79490a5827b2422e5ca6932305ccde6aef4b641676a6b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_io_order_service.py":{"size":31821,"mtime_ns":1785452761834196393,"hash":"b98fd44f3f42b76ef8ec0797f6842c68f8ccee56368969f5152d86ccafa69167"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_menu_badge_service.py":{"size":6108,"mtime_ns":1783258109000000000,"hash":"aec342e2370f584c5ed0024bb08a8346c70e1827c09ab456b4b06e9dfc817d8c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_ocr_service.py":{"size":11166,"mtime_ns":1784036700000000000,"hash":"6f233150e253813a7c9da30e6e5d6046fdea01baa67c2589a332fe511ab795f9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_personnel_service.py":{"size":6707,"mtime_ns":1783845044000000000,"hash":"34f3d1d723890e294aac765a66d7e86ca87f4288f42cec674bb9151de091fe22"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_plan_service.py":{"size":43616,"mtime_ns":1785447059067456413,"hash":"68481c4cfc56bb9b948f45a84f6ab7e467b0a00199f32bfd388dcd4c0d9eb3fc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_site_link_read.py":{"size":2362,"mtime_ns":1782225460000000000,"hash":"3b9e1b93d3c4375b6b3adb4476ceb0df356654089d994aef4fea7e4f29266c06"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_transport_resource_snapshot_service.py":{"size":4861,"mtime_ns":1782793450000000000,"hash":"6f94dcb582fe725738a54469e461aa0124b9754b2141cb78d3859ff1a2f25ca9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_transport_site_service.py":{"size":3701,"mtime_ns":1782225248000000000,"hash":"07585f13aaad965c106e88ac26f5f8c58852c0c2bb0bdb91820185133d799219"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_vehicle_maintenance_service.py":{"size":23307,"mtime_ns":1783761151000000000,"hash":"0c7aa346d9879347d6a98c435fadc47873907ca0774147b69acf0d392e00e58b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_vehicle_recharge_service.py":{"size":22641,"mtime_ns":1783760938000000000,"hash":"a4a9377a8243e30dd7d6a8a175c68525009465fdebdeb01230849156dd8b59f4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_vehicle_urea_service.py":{"size":19556,"mtime_ns":1782696213000000000,"hash":"03d389e791e5fac9a5339d1259d342952fced97712c3657e8f791426de32743b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/web_auth_roles.py":{"size":5592,"mtime_ns":1783858473000000000,"hash":"04c2cd67a7ec8190aa7a9db717a722cd347a52279ac3ef5bd284777f0698a904"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/workflow_callback.py":{"size":3584,"mtime_ns":1780108930000000000,"hash":"a033c13c7bee7f4b636198c1efa47f2abba0d890657e52b0b7057568d4d83a52"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/workflow_engine.py":{"size":14042,"mtime_ns":1780113992000000000,"hash":"5c06a59c734f598d5c7ebe95d30f048ba3a97302b938bc9320d97e5a053c7aef"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/__init__.py":{"size":2207,"mtime_ns":1783208067000000000,"hash":"313e6da0e91d743ce891dd283458c79b50b24c4d909dc96ca7b3fd9d2bfa5013"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/customer_pool.py":{"size":9646,"mtime_ns":1780202350000000000,"hash":"4f0ab87e7a12534011b69f58079ca206d5443eee594849ab4aae728bb847de0d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/db_auto_plan.py":{"size":949,"mtime_ns":1780805095000000000,"hash":"9f7513cd2e74f9ddfe5cbee4ae58a40ee7a58aaaff051d590b19a6e1b08bb46a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/tasks/pl_cert_expiry.py":{"size":711,"mtime_ns":1783208067000000000,"hash":"7c02dbf83fad89c7da757965b545bf77f37792edd0d01d3ed320349b0b60a50b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/__init__.py":{"size":0,"mtime_ns":1780242127000000000,"hash":"a66deceefc987198863f61b8aa1b5715483a69c4a15ef47cd5586c5d8e429b97"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_codegen.py":{"size":4679,"mtime_ns":1782003396000000000,"hash":"bc3f798cfbc359e0327d72e3c0513fe9cbaee196d0d85bcf6567cf5df4211d97"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/bx_date_range.py":{"size":2363,"mtime_ns":1783745556000000000,"hash":"e8b487a9bb4072356cae7b1b38496c441f9a1534d6807798448e6de97073d669"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/crm_export_columns.py":{"size":9594,"mtime_ns":1780743830000000000,"hash":"b20594507aab09cebc3d540acad04547bf780cac9c885187138f5d64718ed513"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/utils/excel_export.py":{"size":4411,"mtime_ns":1780242127000000000,"hash":"7fbde3fca845e4705487e7f801caee308bcc0c99a9da7d0c99681a96eaaf6076"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/ws/__init__.py":{"size":26,"mtime_ns":1780108930000000000,"hash":"d4357444e9b5b0a8593000fb6e4dc37469ebe008e675bf42ec0d55d463f88fc6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/apply_pl_data_scope.py":{"size":10945,"mtime_ns":1782650517000000000,"hash":"928fe2112c9fd8bab4da7f4fc67d6d247c78187ca3b1a4146cc2fd3d9e04697f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/check_pl_json_aliases.py":{"size":2918,"mtime_ns":1781880510000000000,"hash":"b04c5636779ecbcb3082eabdbf42db846cc31f7376129845820c6a4c1e829104"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/compare_dict_snapshots.py":{"size":11072,"mtime_ns":1783860128000000000,"hash":"cfc98cc72c5e387317cfa0a7670c47067fffe8f2e540d5cd580ee459e173e4ef"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/generate_dict_reimport_sql.py":{"size":10692,"mtime_ns":1780201410000000000,"hash":"a4faaf61f246dad04ec3933083ab4348e5d2987ae1ed34b1f6d8f19535642a05"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_bx_data.py":{"size":32783,"mtime_ns":1785455807105877935,"hash":"16751fcd542e209535216a0516d78b62eecb81732d7fe0f9ec051fdf811e93b6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_bx_menu_names.sql":{"size":454,"mtime_ns":1783254856000000000,"hash":"d40ab4c556ab285498f4689c21736832deddc754a9a2b7d806e870ccb39fc9ae"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_clue.py":{"size":18423,"mtime_ns":1785455807106788561,"hash":"72b84e497176bc63264c26d891c591c839f9dd9788988043c5752413c1b62a09"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_contract.py":{"size":36352,"mtime_ns":1785469153230627041,"hash":"b78319ae19a0089684e1ffe1993a1b62be2d687ab65a3e69da423247e0d4d4d0"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_customer.py":{"size":25235,"mtime_ns":1785455807108557895,"hash":"f30d5a50a28a1130325a9d9db88586bcae9e2a39434f077ded25f847af2ed66f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_opportunity.py":{"size":23720,"mtime_ns":1785455807109188438,"hash":"f98964806f32c3020bdd7d644d930760d6ea3ad5162d5f1d6125494263dd5598"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_payment_invoice.py":{"size":13601,"mtime_ns":1785455807109946855,"hash":"c4af77164dac9ba4195c3d239c9679ea367b92f5f7500139f3b59547525af24e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_product.py":{"size":14973,"mtime_ns":1785457303643810528,"hash":"83b693cbc1a590f7a3cd6af2387e638f28474c230fc6f4c0a2813f343d35d887"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_product_category.py":{"size":16785,"mtime_ns":1785462269008382807,"hash":"35d9a064be6f0ac00b6b2162d77d710a2c4f108824eb78425de2341d576cf7fa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_quote.py":{"size":27580,"mtime_ns":1785455807110995231,"hash":"4ac389eb6cb7437d4f5e8203d9908efec9836046ce8628a5e4be1f8b8ddd52cd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_crm_sys_oss.py":{"size":23401,"mtime_ns":1785468795797340265,"hash":"f2d9da1743e3997bf7361d39ff66eab588d7dd55d2114dc9cf6796f4f697a9c3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_dibang_data.py":{"size":20215,"mtime_ns":1785455807112164732,"hash":"28a49a423a784e70bec424b702f3d58f69b6f847153c061414efdcdabb660d0e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_doc_reminder_menu_group.sql":{"size":1562,"mtime_ns":1783256051000000000,"hash":"82a0ce8c5293f5051967633c1c2e0a1dc60e1fc7c97919c9e0866246bbcbe3d1"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_menu_groups.sql":{"size":6367,"mtime_ns":1783256049000000000,"hash":"5f6964d1ea2712d3d72c8f43f08c16597d85fe79f3f54c8be99962090d6c2b67"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_delivery_slip_template.sql":{"size":217,"mtime_ns":1783231586000000000,"hash":"e05e3fe7255e6c8a88aceb1aa53d743a4888a34c9fbaa4449c1cb8a275744d68"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_product_legal_use_cert_url.sql":{"size":1180,"mtime_ns":1783253793000000000,"hash":"01105ec581050477087d9bf65528cfe77ce0026d0fb682cba8014c4cdb046db7"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_slip_template.sql":{"size":191,"mtime_ns":1783219958000000000,"hash":"e2a17c3df7be5cc0436ef979a48de81eecbe99c03f43662f4b0954a09dfa1305"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no.sql":{"size":203,"mtime_ns":1783240340000000000,"hash":"de9b3c8e1617b9c345b2d4005e4a627f10ded089db89d35f0b389b333b840c08"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_no_format.sql":{"size":571,"mtime_ns":1783241697000000000,"hash":"61fc58ebda64c5d6be6bfd374dda99c7134e38dc89031527f71916625c4e36db"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_pl_plan_subpack_slip_template.sql":{"size":215,"mtime_ns":1783238744000000000,"hash":"24cf12e21f9f61f49c38e654c0ca655f56a21e5e2364e4c2ca4547dad583272e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_users.py":{"size":28602,"mtime_ns":1785455807113727900,"hash":"f5626fd3ca8bbc16275862080365c3ea2a27fd0f608e2243a284493762a8f735"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration/minio_url.py":{"size":4770,"mtime_ns":1785465354405875664,"hash":"54a1bf95512c0a8b5feeb518ea3af76983bb1b0a3ba645898b07debdb2cc52e9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260711_hide_vehicle_urea_menus.sql":{"size":269,"mtime_ns":1783760394000000000,"hash":"a5f66647cdb4f0f403689b47b804f8099d7d710753823ef3ddc5e7a5a9ca4ca8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_add_finance_dept.sql":{"size":1697,"mtime_ns":1783855927000000000,"hash":"4ce457089ead5c063ae8e1a6d6553416deb43c54a7edddb574ee2572390aba99"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_affiliation.sql":{"size":753,"mtime_ns":1783845019000000000,"hash":"6d450d264921f43c4e74ee4a2bcfc8335d16f77d9e0413267389741a92bf4eb5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_pl_personnel_type.sql":{"size":1662,"mtime_ns":1783843576000000000,"hash":"24fcd156f97e2bdf2bd158beb5358fe7159874783a84716c6c18d2565cc8ac1a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260712_reset_sys_dept.sql":{"size":4517,"mtime_ns":1783855538000000000,"hash":"3795d6127a4dcf55d406be0fe673b8a83655723fe1f07b855e6fe45823d489fa"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260713_pl_personnel_cert_split.sql":{"size":3436,"mtime_ns":1783946793000000000,"hash":"ce61899ec7e13f41de08dbc923dd1ff2a1a976603d13c8f09aa6fd5be9c914a2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260714_pl_ocr_usage_month.sql":{"size":1270,"mtime_ns":1784032423000000000,"hash":"d7018a4e5be9760846731440be98e53584d8e1461fc4ea54a0c8db61c666e7fe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter.sql":{"size":11104,"mtime_ns":1784122573000000000,"hash":"548dab479fcde4bf1628ca2093fd7840720473a774a5289b55bfd4f46b902153"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260715_crm_price_letter_bill_price.sql":{"size":901,"mtime_ns":1784122547000000000,"hash":"11a4eb6f3b4d89c1a5141bd9a85e931517984b77ac213f5842dc590f928fe1cf"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260719_pl_inbound_outbound_order.sql":{"size":10843,"mtime_ns":1784427911426172052,"hash":"baab6333d8e0865e72a9c474eb642bd5b166f9d70a6db5825d315574f66df069"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/patch_pr3_api.py":{"size":14409,"mtime_ns":1782650231000000000,"hash":"fb4cf4178a4b7c5530999f0c950ed38310dfe81b3168c10117849d6f512be01d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/patch_pr3_api_calls.py":{"size":3345,"mtime_ns":1782650279000000000,"hash":"57732d0beb80ee17b533c78ce0250967fa83c68354ea9d1972275ba1fbc39007"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/patch_pr3_quote_contract.py":{"size":12491,"mtime_ns":1782650163000000000,"hash":"eb6b944df35fda5edb6675b69b00f5a83a75fd78785251d1e81e1788ed439cfe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/refresh_business_role_menus.py":{"size":3812,"mtime_ns":1783858483000000000,"hash":"b2c76109936791e1f624e239b24832237fa0256b38b98578e39825ac215fb166"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/renumber_crm_product_no.py":{"size":9071,"mtime_ns":1785455807114125233,"hash":"320c63801100ea8e9fb62abfb44b3487139377e293310593a877ab2d06e9d2e3"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/run_db_auto_generate_plans.py":{"size":1043,"mtime_ns":1780805102000000000,"hash":"3cd8f15b677f21b2873ff384fc0581da264a53ee4318da3c8262101156e3225b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/seed_sys_menu.sql":{"size":82807,"mtime_ns":1784948075068625581,"hash":"b712bc6d4b5a248a26706137f601e26d81bdb7ffdae016ff818a77155afe15a8"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/setup_business_roles.py":{"size":14256,"mtime_ns":1783858477000000000,"hash":"ac12df2cf75826931c85f4deb3ae28614e31ea825d0beb3cf351a8d4f5cb1071"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/test_aliyun_driving_license_ocr.py":{"size":5130,"mtime_ns":1784032210000000000,"hash":"13d43c9144c3795b8870fbd900ed14f97ae22ee043e2c265a5151525666abebe"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/verify_web_menu_codes.py":{"size":2535,"mtime_ns":1783858485000000000,"hash":"16c9c072b5b80fb309d56823963ebd0dd1f437a3f74d7f82711dd8a7c2de86d2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/start-prod.sh":{"size":7357,"mtime_ns":1782639355000000000,"hash":"ca89869446be74a2bf2367b3b28f448580220859a39a84ad9613ac5fe35a8433"},"/Users/wuzilong/work/00code/shanxia2.0/backend/start.sh":{"size":9548,"mtime_ns":1780114661000000000,"hash":"4d632863e8a0cd81194b491d83a0218a4157435ae812dec76a6f6197b4d48e57"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_data_scope.py":{"size":4660,"mtime_ns":1782649048000000000,"hash":"9545dc65fac7e13bf07ece2ec828ec5957bb115e23d0ac8c996f9c70362a4ecd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_db_inventory_id.py":{"size":586,"mtime_ns":1780934647000000000,"hash":"71a9617d5d0f2c23416686eded204b4c941b47afc3fd6e3facf0c75401e883d9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_delete_guard.py":{"size":1565,"mtime_ns":1782687611000000000,"hash":"5e2a45f63b7296e3a10dfbd4b4716e54370e1439248881d6591cba5c9f6581d6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_dibang_plan_quantity.py":{"size":4258,"mtime_ns":1783777759000000000,"hash":"6af8eb3c1f6c7ad34cd62f1e82e9c6b96737ffd48ba74dda7c5f888c55dd11cd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_personnel_cert_required.py":{"size":2829,"mtime_ns":1783946968000000000,"hash":"e89b3aa798794dc77085af5c4b880cdddcd2c0590c3cc3414f8a5389fd5f6d93"},"/Users/wuzilong/work/00code/shanxia2.0/backend/venv.bak.broken/bin/Activate.ps1":{"size":8593,"mtime_ns":1780108930000000000,"hash":"ed2ea10761f2798e8980084d754284d3fcb94f1284ae7085c35c16108fe24846"},"/Users/wuzilong/work/00code/shanxia2.0/backend/DEPLOY.md":{"size":2574,"mtime_ns":1782639356000000000,"hash":"6989c30ab5c99ebf488137e31e5561b4a00d36060716dfad3fc247b673538818"},"/Users/wuzilong/work/00code/shanxia2.0/backend/README.md":{"size":2752,"mtime_ns":1780114581000000000,"hash":"f5def8d25af0556a443c31a73e81f958883b60cfed8b31fac457f2832c2b6d58"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_io_order_enrichment.py":{"size":2097,"mtime_ns":1784450322000000000,"hash":"0f0fba3a24b2eeda1af4c30180306eca8da5f3dd1807f2e7591f4c46548440c4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_io_order_site_feedback_status.py":{"size":3527,"mtime_ns":1785446258255101137,"hash":"fc53fd735e09b39e7cfe085ca6756f87396b6954f7057fde2bfca39524c34276"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_tripartite_cert_gates.py":{"size":2003,"mtime_ns":1784947499000000000,"hash":"312091d1017c2f22195a9317cd6f39c880cd5aa6b27acaf343181319f045ffee"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_carrier_eligible.py":{"size":689,"mtime_ns":1784947707000000000,"hash":"a3093ae31166d40d7836abb3575c0d4d50ff9e9bf23fee8e7a291afdec39fedd"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/pl/paste_recognize.py":{"size":1845,"mtime_ns":1784955105000000000,"hash":"2a1d015e85b6d9e25d54d94940627a713f4c6e7422dff350c20c4036176d11dc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_paste_recognize_service.py":{"size":9669,"mtime_ns":1784955109000000000,"hash":"2d4e38178168b11f3aeea64a4d0ab4ae60c9a93ad9d7d7568456374af65d7c57"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migration_20260725_pl_tripartite_menus.sql":{"size":2113,"mtime_ns":1784948072087970834,"hash":"c4897f7cff3c22535726f105d1f2e543eb551f6543e8b256ced85ae2a38ee683"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/api/bx/invoice.py":{"size":5868,"mtime_ns":1784991682000000000,"hash":"65eced0eea3c4f9567842be545d2eb042c24398d5ff5eeda2aff693fcff06ff2"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/bx/invoice.py":{"size":1896,"mtime_ns":1784982228000000000,"hash":"909460b2883e85110e15a56d5755748e1bcb3e26dffac89684440813788e8668"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/invoice.py":{"size":14356,"mtime_ns":1784991670000000000,"hash":"fb3fac6667d415b032880fde5ef3413dfac150686b738d6b644ea07d0fc96412"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/bx/invoice_ledger.py":{"size":10778,"mtime_ns":1784980394000000000,"hash":"2b67dc7e5d7280235dbe594bc6a984747ceb3415a527c78516cd60ef3ebccf1f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/crm_supplier_hazard.py":{"size":3425,"mtime_ns":1784998230000000000,"hash":"2365e02c6f2584dd6d18e1ad3c8d3075096777b244cc1430ef913254c61a9442"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_bx_invoice_ledger.py":{"size":1427,"mtime_ns":1784980394000000000,"hash":"9fc702e7becd491b05b730b711ea911f393f2d15509bc5f03f4e70edf7770a9b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_crm_supplier_hazard.py":{"size":855,"mtime_ns":1784996182000000000,"hash":"ce8bd619b1a6dc746541a57eccc095d19ccde3bdb88341995631e15fcfb14bca"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260727_pl_plan_create_date.sql":{"size":536,"mtime_ns":1785140686875543544,"hash":"0694b0b031a6461d8a8940f7403739a8d20fd018403a02a8f1e0e8bf2bc1490f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_plan_create_date.py":{"size":299,"mtime_ns":1785140895170402200,"hash":"7a05f3fcc2d9a36f08b0801f6fbf6ee4fe58982d9212d7a10a70b8b4d41b6f85"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260727_crm_product_brand_alias.sql":{"size":4594,"mtime_ns":1785160650030737687,"hash":"f9f6ea6ca8e31cf5622a31f8303fe81174769b7d094645a88dccfcd6484b9cc4"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_brand_archive.py":{"size":3334,"mtime_ns":1785453570763074999,"hash":"feca7ad16664603f04ee7fa38f03187ecfb70978cc41fcdb47d3fbfb54a11fbc"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_inventory_service.py":{"size":7058,"mtime_ns":1785453321817830521,"hash":"a13cd5ea34dabe91b4663551824c3da9fd2a64ac3fcbc46b2b099644f308b457"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260727_split_brand_from_product_name.py":{"size":5120,"mtime_ns":1785202591782265408,"hash":"d9d9b949cc5f275764b7ea771616141084a0c7cd256dd3262bf532cf4ac0f20f"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_brand_archive.py":{"size":2440,"mtime_ns":1785453323711185768,"hash":"2a704d8278c46f510fa020cd9aed4ea26fd978262d7fe728287bcfe5726798e9"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260731_pl_plan_plan_date_nullable.sql":{"size":223,"mtime_ns":1785439209757662121,"hash":"50a633398cc1c8288c8b5fa221885272ca963c4b777b70102c96632f2d51047a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_feedback_brand_qty.py":{"size":9813,"mtime_ns":1785452749855419713,"hash":"c67d06fc7ac5cc9b3be0c2005f30a4914ca97c27cd5a7c80e7814382cb05c82d"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260731_pl_feedback_brand_qty.sql":{"size":4927,"mtime_ns":1785445506581710120,"hash":"618b647158c133824ead60382d2b6e73713ea32a7b2224efedea431e071cc89a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_pl_feedback_brand_qty.py":{"size":3424,"mtime_ns":1785452788497663858,"hash":"1fe2a5c0b1968f864ef22a436b0e13a697977ef09a71c6e8bfda46da25825f90"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/services/pl_product_display.py":{"size":3590,"mtime_ns":1785451173102957680,"hash":"728e1d79035875ac350201c943241493f04006a2e1f71d7e3e41571eeac721e5"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/backfill_crm_customer_license_urls.py":{"size":7789,"mtime_ns":1785467213374029636,"hash":"a0faaa83477187d8b4a9299d1b170f5ea2c5ca3b450fb4437bf1dc30ab1b5b1b"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/backfill_crm_contract_attachment_urls.py":{"size":9795,"mtime_ns":1785469147228035015,"hash":"6331fa977cbb794c3ee9cb072692c63b05f23f071ab8df1d0b8368455af3b82c"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260731_bx_reimburse_invoice_attachment_id.sql":{"size":784,"mtime_ns":1785473095766881076,"hash":"702c6845b0b936d4a5a06918fcebefd71b38ca4b2dcd7e51ee45af19c77407b6"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/quote_approver_setting.py":{"size":3632,"mtime_ns":1785560604338687232,"hash":"7442687a3dde4a0a354064c3fef7503d37c9ce3f1991873e64befd2d1812ba4a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/tests/test_quote_approver_setting.py":{"size":1015,"mtime_ns":1785560055190832342,"hash":"2a7e91833de33ed92ac8e9157746f15fd7a9e7c5f25bf043dfb0dd7c77859715"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/quote_approver_setting.py":{"size":291,"mtime_ns":1785560601528774704,"hash":"e978cab24ee46f23b7432bb6f411e760f2d8d782a924efe811608c2200fcba0a"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260801_crm_quote_approver_setting.sql":{"size":2117,"mtime_ns":1785560449173091996,"hash":"66c92fbf3031539484e241934c14fee379a70b1b179a8b8345c5ae70c8498f14"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/crud/crm/contract_approver_setting.py":{"size":2875,"mtime_ns":1785561463337293690,"hash":"7c3aeed13e66f67159220b323298b414a9d1b1f9ca6b679dca31532be86a132e"},"/Users/wuzilong/work/00code/shanxia2.0/backend/app/schemas/crm/contract_approver_setting.py":{"size":294,"mtime_ns":1785561469090499071,"hash":"fca8a7cb3a75c82e9c3395f2471e20dfcdc469a8fd299c9c6ce5e79576a6c3fb"},"/Users/wuzilong/work/00code/shanxia2.0/backend/scripts/migrate_20260801_crm_contract_approver_setting.sql":{"size":1903,"mtime_ns":1785561454940491268,"hash":"f81470b97da71283b9d3defc81fd177cc2fea1dbd487febaebf7a8f24a73c71f"}} \ No newline at end of file diff --git a/backend/graphify-out/graph.html b/backend/graphify-out/graph.html index 15ab6333d..1fca2ef2a 100644 --- a/backend/graphify-out/graph.html +++ b/backend/graphify-out/graph.html @@ -63,12 +63,12 @@
-