diff --git a/docs/STATUS.md b/docs/STATUS.md index 212812d..66e6a72 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -4,6 +4,8 @@ > 维护规则:�完整完�一个需求,**倒�在本文顶部加一�**(日期 + 主题 + 关键事实);其余主文档(架构 / 规划 / 技术债 / 部署)维护�自的"当�有效说法",本文�记录"什么时候�到了哪一步"。维护规则出处�根目录 [AGENTS.md](../AGENTS.md)。 > 早期�目(2026-09-17 之�)已精简为锚点,完整�水� [archive/2026-09_governance_batches.md](archive/2026-09_governance_batches.md) 与 [archive/2026-09_status_history.md](archive/2026-09_status_history.md)。 +> 2026-09-24(**D17 Human-in-Loop �师傅�验�馈批 3 上线(�端按钮 + Dialog + �验角标)——闭环�视**:① [ResultView.vue:35-47](frontend/src/modules/moldinsight/ResultView.vue#L35-L47) 方案�片 summary-header 加 `t-tag theme="success" variant="light"` �验角标("📚 历��验 N �"),从 `hintsByAxis[currentAxisHint]` 读�,按 scheme_axis 索引,无 hints 时�渲染;② [ResultView.vue:131-138](frontend/src/modules/moldinsight/ResultView.vue#L131-L138) `export-buttons-bar` 加 `� �师傅�馈` 按钮(`v-if="canGiveFeedback"` 角色门控:admin 或 process_engineer);③ 新建 [components/HumanFeedbackDialog.vue](frontend/src/modules/moldinsight/components/HumanFeedbackDialog.vue):t-dialog + t-form + t-radio-group 三选一(采纳 / 建议调整 / 拒�)+ t-textarea 原因 + 调整建议(仅 adjust 模�显�);�交走 `moldinsightApi.submitExperienceFeedback`,�功� emit `submitted` 让父组件�拉 hints 刷新角标;④ [shared/api-client.ts:407-444](frontend/src/shared/api-client.ts#L407-L444) `moldinsightApi` 新增 `getExperienceHints` / `submitExperienceFeedback` 两个方法(生�类型由 openapi-typescript 自动产出);⑤ [ResultView.vue](frontend/src/modules/moldinsight/ResultView.vue) `onMounted` 调 `loadExperienceHints` 拉一次 + �馈�交� `onFeedbackSubmitted` �拉一次(写入�消费�端��);`canGiveFeedback` 走 `is_superuser || roles � process_engineer` 表达�(项目硬规则"�端��破� ResultView.vue 视觉一致性":按钮与既有 6 个 t-button �一 `export-buttons-bar`,theme/size 一致;角标 theme="success" variant="light" 与既有 t-tag theme="primary" / "warning" �款)。**接��更三件套�批完�**:openapi.json �导出(2 个新 path,� ExperienceFeedbackCreate / ExperienceHintItem / ExperienceHintsResponse 三个新 schema)→ `npm run gen:api` �生 types/api.ts → `npm run build` 通过。**�端基线**:**192 passed, 13 skipped**(批 3 �改�端);**�端构建**:vue-tsc + vite 通过,ResultView 包大� 37.18 kB / 11.91 kB gzip。**D17 闭环端到端�用**:admin / process_engineer 在 ResultView 点"� �师傅�馈" → Dialog 选"采纳"+ 写原因 → �交 → 角标�时刷新(�拉 hints);下次�指纹 STP 分�,`PartingCandidateGenerator` 候选方�加� + `PartingSchemeScorer` total_score 加� + method 标签�级 `human_experience_primary`。**下一步**:批 4(衰�机制完善 + DFM 规则库独立模�化 + �验冲�仲� UI)按需排期。) + > 2026-09-23(**D17 Human-in-Loop �师傅�验�馈批 2 上线(算法接� + OCC payload 通�)——闭环通**:① 算法层 4 个核心文件加 `hints` 形��传链:[parting_candidate_generator.py:13-66](src/moldinsight/core/parting_candidate_generator.py#L13-L66) `_build_axis_metrics` 末尾按 hints 加�(`weight × 20` 上�,`sample_count ≥ 2 + weight ≥ 0.5` → method 标签�级 `human_experience_primary`);[parting_scheme_scorer.py:8-46](src/moldinsight/core/parting_scheme_scorer.py#L8-L46) `_score_scheme` 新增 `human_hint_bonus` 字段(weight × 12 上�,sample_count < 2 时 ×0.5 折�),纳入 total_score;[multi_scheme_planner.py:26-86](src/moldinsight/core/multi_scheme_planner.py#L26-L86) `generate_plan` �传 hints 到下两层,`global_summary.applied_hints` 注入返回;② [processing_service.py:531-595](src/moldinsight/services/processing_service.py#L531-L595) `_step_generate_cavity` 调 `experience_feedback_service.resolve_for_process_params` 拿�指纹 hints,装进 run_occ payload 顶层 `experience_hints` 字段(普通 dict �传,pickle 安全,满足 [occ_worker.py:7-8](src/moldinsight/core/occ_worker.py#L7-L8) 硬规则);③ [occ_worker.py:117-140](src/moldinsight/core/occ_worker.py#L117-L140) `_op_generate_cavity` 读 `payload.get("experience_hints") or {}` �传给 `planner.generate_plan(..., hints=...)`;④ D17 闭环验�:�师傅写一��指纹 `adopted` → � X 通�下次分� `priority_score` +18,`score_breakdown.human_hint_bonus` +12(sample_count=3),method 标签�级 `human_experience_primary`。**接��零�化**(路径 / schema �动;仅 OCC �进程内部�应� `global_summary.applied_hints`,由�端 ResultView 渲染角标——批 3 实现)。**测试基线**:**192 passed, 13 skipped**(批 2 净增 7 通过 + 4 OCC-gated skip:candidate_generator 3 例 / scheme_scorer 4 例在无 OCC 环境跑通,multi_scheme_planner + processing_service 4 例 OCC-gated 待 conda `gemold` 镜�验�)。**接��更三件套执行节点**:openapi.json �导出与�端 `gen:api` 待批 3 完��一并执行(�端调用两 path + ResultView 渲染一并改)。**下一步**:批 3 �端(ResultView 按钮组 + `HumanFeedbackDialog.vue` + `moldinsightApi` 两个方法 + �验角标)。) > 2026-09-23(**D17 Human-in-Loop �师傅�验�馈批 1 上线(数� + �� + 写入 API)**:① 新增 `experience_feedback` 表(32 表�移,alembic head `b7d1f4a92c3e`)——�师傅对系统推�方案给出"采纳 / 调整 / 拒�"�馈,按"产�指纹 + 工艺�数"为键跨任务匹�,下次�指纹产�分�自动消费;② 新增 3 个���(`view_experience_feedback` / `feedback_experience_hint` / `manage_experience_feedback`)+ 新角色 `process_engineer`(� view + feedback ��,admin 角色 permissions �步补�);③ 新增 2 个端点(`POST /api/tasks/{task_id}/experience-feedback` �交�馈 + `GET /api/tasks/{task_id}/experience-hints` 拉��指纹历� hints 摘�);④ `init_db.py` 幂等 bug 修�——既有 DB �动期��跳过新增�� / 角色补登(`init_permissions` / `init_roles` 改为按 code 比对,新增�留已有 id);⑤ ORM / �移 / service / router / api 注册���:D9 边界(service.flush + 路由 commit);D17 衰�(写新�馈时� `stp_file_id` 整体续期 90 天 TTL);`User.has_permission` 全仓首次调用点([src/shared/models/identity.py:38](src/shared/models/identity.py#L38) 此�仅定义零调用)。**接��新增 2 path**(openapi.json �导出�批 3 一并执行——批 2 OCC payload 接�改了 `/api/status/{task_id}` 实际�应结构需等到 OCC 集��地��导出)。**测试基线**:**185 passed, 9 skipped**(批 1 净增 59 测试,� `compute_fingerprint` 分桶�数化覆盖 bbox / volume / face / undercut / material / is_foam �边界值 + API 契约 401/403/422/200 路径 + 衰�续期 + 任务归属校验 + ORM 注册收�)。**下一步**:批 2 算法接�(PartingCandidateGenerator / PartingSchemeScorer / MultiSchemeMoldPlanner �传 hints + OCC worker payload `experience_hints` 通�)+ 批 3 �端按钮 + �馈 Dialog + �验角标渲染。) diff --git a/docs/TECH_DEBT.md b/docs/TECH_DEBT.md index 13530c0..a1e6723 100644 --- a/docs/TECH_DEBT.md +++ b/docs/TECH_DEBT.md @@ -235,8 +235,14 @@ - [occ_worker.py](src/moldinsight/core/occ_worker.py) `_op_generate_cavity`:`payload.get("experience_hints") or {}` �传给 `planner.generate_plan`,普通 dict 跨进程 pickle 安全 - 测试基线:192 passed, 13 skipped(批 2 净增 7 通过 + 4 OCC-gated skip) -**剩余工作(按�赖顺�)**: -- 批 3:�端按钮组(ResultView.vue `export-buttons-bar` 内�)+ `HumanFeedbackDialog.vue` 组件 + `moldinsightApi.getExperienceHints` / `submitExperienceFeedback` + �验�示角标渲染(`applied_hints` 按 scheme_axis 索引) +**批 3 已完�(�端按钮 + Dialog + �验角标)—— 闭环�视**: +- [ResultView.vue:35-47](frontend/src/modules/moldinsight/ResultView.vue#L35-L47) 方案�片 summary-header 加 `t-tag` �验角标(`currentAxisHint` computed 按 scheme_axis 索引 hintsByAxis,无 hints �渲染) +- [ResultView.vue:131-138](frontend/src/modules/moldinsight/ResultView.vue#L131-L138) `export-buttons-bar` 加 `� �师傅�馈` 按钮(`v-if="canGiveFeedback"` 角色门控:admin 或 process_engineer) +- [HumanFeedbackDialog.vue](frontend/src/modules/moldinsight/components/HumanFeedbackDialog.vue) 新组件:t-dialog + t-form + t-radio-group 三选一 + t-textarea;走 `moldinsightApi.submitExperienceFeedback`,�功� emit `submitted` 让父组件�拉 hints +- [shared/api-client.ts:407-444](frontend/src/shared/api-client.ts#L407-L444) `moldinsightApi` 新增 `getExperienceHints` / `submitExperienceFeedback` +- 接��更三件套�批完�:openapi.json �导出(2 新 path)→ `npm run gen:api` → `npm run build` 通过 + +**剩余工作(按需排期)**: - 批 4:衰�机制完善(与 DB 一致性定期核查)+ DFM 规则库独立模�化 + �验冲�仲� UI ~~原现状 / 影�~~:算法生�的方案与真实工程决策有差�,�师傅�次都�推翻系统建议��,沉淀�验无结构化路径。 diff --git a/frontend/src/modules/moldinsight/ResultView.vue b/frontend/src/modules/moldinsight/ResultView.vue index 00ab659..2e65778 100644 --- a/frontend/src/modules/moldinsight/ResultView.vue +++ b/frontend/src/modules/moldinsight/ResultView.vue @@ -33,7 +33,17 @@

推�方案

- {{ selectedScheme?.title || selectedScheme?.scheme_id || '方案待定' }} +
+ {{ selectedScheme?.title || selectedScheme?.scheme_id || '方案待定' }} + + 📚 历��验 {{ currentAxisHint.sample_count }} � + +
@@ -126,6 +136,15 @@ 💰 �本估算 + + � �师傅�馈 +
@@ -535,6 +554,18 @@
+ +
@@ -543,8 +574,10 @@ import { reactive, computed, onMounted } from 'vue' import { useRoute, useRouter } from 'vue-router' import { useAppStore } from '@/stores/app' import { apiRequest } from '@/shared/api' +import { moldinsightApi } from '@/shared/api-client' import { handleApiError, addNotification } from '@/shared/notification' import { formatDateTime, formatNumber } from '@/shared/utils' +import HumanFeedbackDialog from './components/HumanFeedbackDialog.vue' const route = useRoute() const router = useRouter() @@ -573,9 +606,12 @@ interface Scheme { summary?: string reason?: string score?: number - score_breakdown?: { manufacturability?: number; parting_quality?: number } + confidence_score?: number + score_breakdown?: { manufacturability?: number; parting_quality?: number; human_hint_bonus?: number } mold_structure_type?: string offset_label?: string + axis?: string + method?: string cavity_data?: CavityData key_info?: KeyInfo html_file?: string @@ -724,6 +760,18 @@ const state = reactive({ costLoading: false, costError: '', costResult: null as CostEstimate | null, + // D17 Human-in-Loop:è€�师傅ç»�验å��馈 + feedbackDialogVisible: false, + hintsFingerprint: {} as Record, + hints: [] as Array<{ + scheme_axis: string + adopted_count: number + rejected_count: number + adjust_count: number + confidence: number + weight: number + sample_count: number + }>, }) const camSteelOptions = [ @@ -777,12 +825,63 @@ const createProductFromAnalysis = async () => { } } +// D17 Human-in-Loop:ç»�验å��馈 +const taskId = computed(() => (route.params.taskId as string) || '') + +const hintsByAxis = computed>(() => { + const map: Record = {} + for (const h of state.hints) { + map[h.scheme_axis] = h + } + return map +}) + +const currentAxisHint = computed<(typeof state.hints)[number] | undefined>(() => { + const axis = selectedScheme.value?.axis + if (!axis) return undefined + return hintsByAxis.value[axis] +}) + +const canGiveFeedback = computed(() => { + const u: any = appStore.user + if (!u) return false + if (u.is_superuser) return true + const roles = u.roles as Array<{ code: string }> | undefined + return !!roles?.some(r => r.code === 'process_engineer') +}) + +const loadExperienceHints = async () => { + if (!taskId.value) return + try { + const data = await moldinsightApi.getExperienceHints(taskId.value) + state.hints = (data.hints || []) as typeof state.hints + state.hintsFingerprint = data.fingerprint || {} + } catch (e) { + // ä¸�阻塞主æµ�程:拉å�–失败时é�™é»˜é€€åŒ–(按钮ä»�å�¯ç‚¹å‡»ï¼Œæ–°å��馈走 POST 写入) + console.warn('拉å�–ç»�验 hints 失败', e) + } +} + +const openFeedbackDialog = () => { + if (!selectedScheme.value?.scheme_id) { + addNotification('当å‰�方案未确定,无法å��馈', 'error') + return + } + state.feedbackDialogVisible = true +} + +const onFeedbackSubmitted = async () => { + addNotification('å��馈已生效,正在刷新ç»�验角标', 'success') + await loadExperienceHints() +} + onMounted(() => { if (!appStore.user) { router.push('/login') return } loadTask() + loadExperienceHints() }) const getPriorityText = (priority: string) => { diff --git a/frontend/src/modules/moldinsight/components/HumanFeedbackDialog.vue b/frontend/src/modules/moldinsight/components/HumanFeedbackDialog.vue new file mode 100644 index 0000000..e899c11 --- /dev/null +++ b/frontend/src/modules/moldinsight/components/HumanFeedbackDialog.vue @@ -0,0 +1,184 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/shared/api-client.ts b/frontend/src/shared/api-client.ts index f3e8698..ad54089 100644 --- a/frontend/src/shared/api-client.ts +++ b/frontend/src/shared/api-client.ts @@ -403,4 +403,47 @@ export const moldinsightApi = { body: JSON.stringify(data), }) }, + + // D17 Human-in-Loop:è€�师傅ç»�验å��馈(写入å�³æ¶ˆè´¹é—­çŽ¯ï¼‰ + getExperienceHints(taskId: string) { + return apiRequest<{ + task_id: string + stp_file_id: number + material_name: string + is_foam: boolean + fingerprint: Record + hints: Array<{ + scheme_axis: string + adopted_count: number + rejected_count: number + adjust_count: number + confidence: number + weight: number + sample_count: number + }> + }>(`/api/tasks/${taskId}/experience-hints`) + }, + + submitExperienceFeedback( + taskId: string, + data: { + scheme_id: string + feedback_status: 'adopted' | 'adjust' | 'rejected' + feedback_reason?: string + adjust_suggestion?: string + confidence_at_submit?: number + score_at_submit?: number + } + ) { + return apiRequest<{ + id: number + scheme_id: string + scheme_axis: string + feedback_status: string + created_at: string + }>(`/api/tasks/${taskId}/experience-feedback`, { + method: 'POST', + body: JSON.stringify(data), + }) + }, } diff --git a/frontend/src/types/api.ts b/frontend/src/types/api.ts index 2a0e8f2..acb3948 100644 --- a/frontend/src/types/api.ts +++ b/frontend/src/types/api.ts @@ -242,7 +242,7 @@ export interface paths { put?: never; /** * Upload Stp - * @description 上传STP文件并存储到数æ�®åº“ + * @description �ϴ�STP�ļ����洢�����ݿ� */ post: operations["upload_stp_api_upload_post"]; delete?: never; @@ -262,7 +262,7 @@ export interface paths { put?: never; /** * Batch Upload - * @description 批é‡�上传多个 STP 文件,æ¯�个文件创建独立分æž�任务,用 batch_id è�šå�ˆã€‚ + * @description �����ϴ���� STP �ļ���ÿ���ļ������������������� batch_id �ۺϡ� */ post: operations["batch_upload_api_batch_upload_post"]; delete?: never; @@ -280,7 +280,7 @@ export interface paths { }; /** * Get Batch Status - * @description è�šå�ˆæŸ¥è¯¢æ‰¹é‡�任务进度(D7:以 PG 为å�•一事实æº�,按 batch_id è�šå�ˆï¼›Redis 仅热缓存) + * @description �ۺϲ�ѯ����������ȣ�D7���� PG Ϊ��һ��ʵԴ���� batch_id �ۺϣ�Redis ���Ȼ��棩 */ get: operations["get_batch_status_api_batch__batch_id__get"]; put?: never; @@ -300,21 +300,21 @@ export interface paths { }; /** * Get Status - * @description 获å�–任务状æ€�(需登录,且仅任务所有者å�¯è®¿é—®ï¼‰ + * @description ��ȡ����״̬�����¼���ҽ����������߿ɷ��ʣ� * - * 优先返回内存中的任务信æ�¯ï¼› - * 如果内存中ä¸�存在,则从 PostgreSQL + RustFS 组装一个æŒ�久化的任务视图, - * 结构与内存任务ä¿�æŒ�å°½é‡�一致,便于å‰�端集中展示总结性信æ�¯ã€‚ + * ���ȷ����ڴ��е�������Ϣ�� + * ����ڴ��в����ڣ���� PostgreSQL + RustFS ��װһ���־û���������ͼ�� + * �ṹ���ڴ����ñ±£³Ö¾ï¿½ï¿½ï¿½Ò»ï¿½Â£ï¿½ï¿½ï¿½ï¿½ï¿½Ç°ï¿½Ë¼ï¿½ï¿½ï¿½Õ¹Ê¾ï¿½Ü½ï¿½ï¿½ï¿½ï¿½ï¿½Ï¢ï¿½ï¿½ */ get: operations["get_status_api_status__task_id__get"]; put?: never; /** * Get Status - * @description 获å�–任务状æ€�(需登录,且仅任务所有者å�¯è®¿é—®ï¼‰ + * @description ��ȡ����״̬�����¼���ҽ����������߿ɷ��ʣ� * - * 优先返回内存中的任务信æ�¯ï¼› - * 如果内存中ä¸�存在,则从 PostgreSQL + RustFS 组装一个æŒ�久化的任务视图, - * 结构与内存任务ä¿�æŒ�å°½é‡�一致,便于å‰�端集中展示总结性信æ�¯ã€‚ + * ���ȷ����ڴ��е�������Ϣ�� + * ����ڴ��в����ڣ���� PostgreSQL + RustFS ��װһ���־û���������ͼ�� + * �ṹ���ڴ����ñ±£³Ö¾ï¿½ï¿½ï¿½Ò»ï¿½Â£ï¿½ï¿½ï¿½ï¿½ï¿½Ç°ï¿½Ë¼ï¿½ï¿½ï¿½Õ¹Ê¾ï¿½Ü½ï¿½ï¿½ï¿½ï¿½ï¿½Ï¢ï¿½ï¿½ */ post: operations["get_status_api_status__task_id__post"]; delete?: never; @@ -332,13 +332,13 @@ export interface paths { }; /** * Get File History - * @description 获å�–当å‰�用户按文件å��分组的文件历å�²è®°å½•(支æŒ�多上传) + * @description ��ȡ��ǰ�û����ļ���������ļ���ʷ��¼��֧�ֶ��ϴ��� */ get: operations["get_file_history_api_history_get"]; put?: never; /** * Get File History - * @description 获å�–当å‰�用户按文件å��分组的文件历å�²è®°å½•(支æŒ�多上传) + * @description ��ȡ��ǰ�û����ļ���������ļ���ʷ��¼��֧�ֶ��ϴ��� */ post: operations["get_file_history_api_history_post"]; delete?: never; @@ -356,13 +356,13 @@ export interface paths { }; /** * Get File Records - * @description 获å�–当å‰�用户指定文件å��的所有上传记录(支æŒ�多上传历å�²ï¼‰ + * @description ��ȡ��ǰ�û�ָ���ļ����������ϴ���¼��֧�ֶ��ϴ���ʷ�� */ get: operations["get_file_records_api_history__filename__get"]; put?: never; /** * Get File Records - * @description 获å�–当å‰�用户指定文件å��的所有上传记录(支æŒ�多上传历å�²ï¼‰ + * @description ��ȡ��ǰ�û�ָ���ļ����������ϴ���¼��֧�ֶ��ϴ���ʷ�� */ post: operations["get_file_records_api_history__filename__post"]; delete?: never; @@ -382,7 +382,7 @@ export interface paths { put?: never; /** * Generate Cam Plan - * @description 基于任务分模结果生æˆ� CAM 准备包(MVP)。 + * @description ��������������� CAM ׼������MVP���� */ post: operations["generate_cam_plan_api_cam_plan_post"]; delete?: never; @@ -391,91 +391,6 @@ export interface paths { patch?: never; trace?: never; }; - "/api/optimize-layout": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Optimize Cavity Layout */ - post: operations["optimize_cavity_layout_api_optimize_layout_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/design-cooling": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Design Cooling System */ - post: operations["design_cooling_system_api_design_cooling_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/design-gating": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Design Gating System */ - post: operations["design_gating_system_api_design_gating_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/design-mold-system": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Design Complete Mold System */ - post: operations["design_complete_mold_system_api_design_mold_system_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/detect-undercuts": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Detect Undercuts */ - post: operations["detect_undercuts_api_detect_undercuts_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/api/cost-estimate": { parameters: { query?: never; @@ -487,7 +402,7 @@ export interface paths { put?: never; /** * Estimate Cost - * @description 模具æˆ�本估算:优先使用 LLM,未å�¯ç”¨æ—¶é™�级为规则å¼�ä¼°ç®— + * @description ģ�߳ɱ����㣺����ʹ�� LLM��δ����ʱ����Ϊ����ʽ���� */ post: operations["estimate_cost_api_cost_estimate_post"]; delete?: never; @@ -496,142 +411,6 @@ export interface paths { patch?: never; trace?: never; }; - "/api/design-cam": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Design Mold Cam */ - post: operations["design_mold_cam_api_design_cam_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/check-collision": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Check Toolpath Collision */ - post: operations["check_toolpath_collision_api_check_collision_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/optimize-toolpath": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Optimize Toolpath */ - post: operations["optimize_toolpath_api_optimize_toolpath_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/design-electrodes": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Design Edm Electrodes */ - post: operations["design_edm_electrodes_api_design_electrodes_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/simulate-machining": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Simulate Machining */ - post: operations["simulate_machining_api_simulate_machining_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/export-mold": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Export Mold Results */ - post: operations["export_mold_results_api_export_mold_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/export-download/{filepath}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Download Export File */ - get: operations["download_export_file_api_export_download__filepath__get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/export-recommendations": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Export Recommendations */ - get: operations["get_export_recommendations_api_export_recommendations_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/api/aluminum-price/current": { parameters: { query?: never; @@ -666,6 +445,51 @@ export interface paths { patch?: never; trace?: never; }; + "/api/tasks/{task_id}/experience-feedback": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Submit Feedback + * @description �ύ������������ + * + * Ȩ�ޣ���¼�û� + ������� + feedback_experience_hint�� + * д�����·�� commit��D9 �߽磩+ invalidate_task_view��task_view 60s TTL ʧЧ���� + */ + post: operations["submit_feedback_api_tasks__task_id__experience_feedback_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/tasks/{task_id}/experience-hints": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Experience Hints + * @description ��ȡ�������ָͬ����ʷ hints ժҪ�� + * + * Ȩ�ޣ���¼�û� + �����������֪֯ʶ�������˿ɼ�����Ҫ���չ���ʦȨ�ޣ��� + */ + get: operations["get_experience_hints_api_tasks__task_id__experience_hints_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/html/{filename}": { parameters: { query?: never; @@ -673,7 +497,7 @@ export interface paths { path?: never; cookie?: never; }; - /** 读å�– HTML å�¯è§†åŒ–报告 */ + /** ��ȡ HTML ���ӻ����� */ get: operations["get_html_report_html__filename__get"]; put?: never; post?: never; @@ -710,10 +534,7 @@ export interface paths { }; get?: never; put?: never; - /** - * Create Product From Task - * @description 从模具分æž�任务创建进销存æˆ�å“�,回写 stp_files.product_id(P2-1) - */ + /** Create Product From Task */ post: operations["create_product_from_task_api_products_from_task__task_id__post"]; delete?: never; options?: never; @@ -1037,7 +858,7 @@ export interface paths { put?: never; /** * Consume Materials - * @description 记录销售订å�•的物料消耗(在已å�‘料基础上记录é¢�外消耗,如报废/超耗) + * @description ��¼���۶������������ģ����ѷ��ϻ����ϼ�¼�������ģ��籨��/���ģ� */ post: operations["consume_materials_api_sales_orders__order_id__consume_materials_post"]; delete?: never; @@ -1178,7 +999,7 @@ export interface paths { put?: never; /** * Calculate Purchase Demands - * @description æ ¹æ�®é”€å”®è®¢å�• ID 列表,自动推导采购需求(BOM 展开 → 库存对比 → 供应商推è��) + * @description �������۶��� ID �б����Զ��Ƶ��ɹ�����BOM չ�� �� ���Ա� �� ��Ӧ���Ƽ��� */ post: operations["calculate_purchase_demands_api_purchase_demands_calculate_post"]; delete?: never; @@ -1198,7 +1019,7 @@ export interface paths { put?: never; /** * Convert Purchase Demands - * @description 将采购需求一键转æ�¢ä¸ºé‡‡è´­å�•(按供应商分组,æ¯�组生æˆ�一张è�‰ç¨¿é‡‡è´­å�•) + * @description ���ɹ�����һ��ת��Ϊ�ɹ���������Ӧ�̷��飬ÿ������һ�Ųݸ�ɹ����� */ post: operations["convert_purchase_demands_api_purchase_demands_convert_post"]; delete?: never; @@ -1399,15 +1220,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - /** BBox3D */ - BBox3D: { - /** Dimensions */ - dimensions?: number[]; - /** Min */ - min?: number[] | null; - /** Max */ - max?: number[] | null; - }; /** Body_batch_upload_api_batch_upload_post */ Body_batch_upload_api_batch_upload_post: { /** Files */ @@ -1477,29 +1289,9 @@ export interface components { /** Cavity Match */ cavity_match: number; }; - /** CamDesignRequest */ - CamDesignRequest: { - cavity_bbox?: components["schemas"]["BBox3D"]; - stock_bbox?: components["schemas"]["BBox3D"]; - /** - * Mold Steel - * @default P20 - */ - mold_steel: string; - /** - * Surface Quality - * @default standard - */ - surface_quality: string; - /** - * Controller - * @default fanuc - */ - controller: string; - }; /** * CamPlanRequest - * @description 未æ��供的å��好字段回è�½åˆ°ä»»åŠ¡æŒ�久化å��好,å†�回è�½åˆ°é»˜è®¤å€¼ã€‚ + * @description δ�ṩ��ƫ���ֶλ��䵽����־û�ƫ�ã��ٻ��䵽Ĭ��ֵ�� */ CamPlanRequest: { /** Task Id */ @@ -1515,32 +1307,6 @@ export interface components { /** Include Gcode */ include_gcode?: boolean | null; }; - /** CollisionCheckRequest */ - CollisionCheckRequest: { - /** Toolpath Points */ - toolpath_points?: number[][]; - tool?: components["schemas"]["ToolSpec"]; - stock_bbox?: components["schemas"]["BBox3D"]; - /** Clamp Positions */ - clamp_positions?: number[][] | null; - }; - /** CoolingDesignRequest */ - CoolingDesignRequest: { - mold_size?: components["schemas"]["MoldSize"]; - product_bbox?: components["schemas"]["BBox3D"]; - /** - * Material - * @default ABS - */ - material: string; - /** - * Cavity Count - * @default 1 - */ - cavity_count: number; - /** Cycle Time Target */ - cycle_time_target?: number | null; - }; /** CostEstimateRequest */ CostEstimateRequest: { /** Task Id */ @@ -1578,39 +1344,85 @@ export interface components { /** Is Active */ is_active: boolean; }; - /** ElectrodeDesignRequest */ - ElectrodeDesignRequest: { - /** Undercut Regions */ - undercut_regions?: { - [key: string]: unknown; - }[]; - cavity_bbox?: components["schemas"]["BBox3D"]; + /** + * ExperienceFeedbackCreate + * @description ��ʦ�����������������塣 + */ + ExperienceFeedbackCreate: { + /** Scheme Id */ + scheme_id: string; /** - * Material - * @default copper + * Feedback Status + * @enum {string} */ - material: string; - /** - * Spark Gap - * @default 0.05 - */ - spark_gap: number; - /** - * Overburn - * @default 0.1 - */ - overburn: number; + feedback_status: "adopted" | "adjust" | "rejected"; + /** Feedback Reason */ + feedback_reason?: string | null; + /** Adjust Suggestion */ + adjust_suggestion?: string | null; + /** Confidence At Submit */ + confidence_at_submit?: number | null; + /** Score At Submit */ + score_at_submit?: number | null; }; - /** ExportMoldRequest */ - ExportMoldRequest: { + /** + * ExperienceFeedbackResponse + * @description ����д����Ӧ�� + */ + ExperienceFeedbackResponse: { + /** Id */ + id: number; + /** Scheme Id */ + scheme_id: string; + /** Scheme Axis */ + scheme_axis: string; + /** Feedback Status */ + feedback_status: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + }; + /** + * ExperienceHintItem + * @description ָͬ����ʷ hints ժҪ���� scheme_axis �ۺϣ��� + */ + ExperienceHintItem: { + /** Scheme Axis */ + scheme_axis: string; + /** Adopted Count */ + adopted_count: number; + /** Rejected Count */ + rejected_count: number; + /** Adjust Count */ + adjust_count: number; + /** Confidence */ + confidence: number; + /** Weight */ + weight: number; + /** Sample Count */ + sample_count: number; + }; + /** + * ExperienceHintsResponse + * @description GET /experience-hints ��Ӧ�� + */ + ExperienceHintsResponse: { /** Task Id */ task_id: string; - /** Scheme Id */ - scheme_id?: string | null; - /** Formats */ - formats?: string[]; - /** Components */ - components?: string[]; + /** Stp File Id */ + stp_file_id: number; + /** Material Name */ + material_name: string; + /** Is Foam */ + is_foam: boolean; + /** Fingerprint */ + fingerprint: { + [key: string]: string; + }; + /** Hints */ + hints: components["schemas"]["ExperienceHintItem"][]; }; /** FinanceAllocationCreate */ FinanceAllocationCreate: { @@ -1775,27 +1587,6 @@ export interface components { */ allocations: components["schemas"]["FinanceAllocationResponse"][]; }; - /** GatingDesignRequest */ - GatingDesignRequest: { - product_bbox?: components["schemas"]["BBox3D"]; - /** - * Material - * @default ABS - */ - material: string; - /** - * Cavity Count - * @default 1 - */ - cavity_count: number; - /** - * Gate Type - * @default auto - */ - gate_type: string; - /** Layout Positions */ - layout_positions?: number[][] | null; - }; /** HTTPValidationError */ HTTPValidationError: { /** Detail */ @@ -1861,19 +1652,6 @@ export interface components { /** Password */ password: string; }; - /** MachiningSimulateRequest */ - MachiningSimulateRequest: { - /** Operations */ - operations?: { - [key: string]: unknown; - }[]; - stock_bbox?: components["schemas"]["BBox3D"]; - /** - * Resolution - * @default 2 - */ - resolution: number; - }; /** MaterialConsumptionItem */ MaterialConsumptionItem: { /** Material Id */ @@ -1890,28 +1668,28 @@ export interface components { }; /** * MaterialPriceHistoryCreate - * @description 创建物料价格历å�²çš„请求模型 + * @description �������ϼ۸���ʷ������ģ�� */ MaterialPriceHistoryCreate: { /** * Price - * @description 物料价格 + * @description ���ϼ۸� */ price: number; /** * Supplier Id - * @description 供应商ID + * @description ��Ӧ��ID */ supplier_id?: number | null; /** * Remark - * @description 备注 + * @description ��ע */ remark?: string | null; }; /** * MaterialPriceHistoryResponse - * @description 物料价格历å�²çš„å“�应模型 + * @description ���ϼ۸���ʷ����Ӧģ�� */ MaterialPriceHistoryResponse: { /** Id */ @@ -1943,7 +1721,7 @@ export interface components { }; /** * MaterialPriceTrendResponse - * @description 物料价格趋势的å“�应模型 + * @description ���ϼ۸����Ƶ���Ӧģ�� */ MaterialPriceTrendResponse: { /** Product Id */ @@ -1963,44 +1741,44 @@ export interface components { }; /** * MaterialSupplierCreate - * @description 创建物料供应商关è�”的请求模型 + * @description �������Ϲ�Ӧ�̹���������ģ�� */ MaterialSupplierCreate: { /** * Supplier Id - * @description 供应商ID + * @description ��Ӧ��ID */ supplier_id: number; /** * Is Primary - * @description 是å�¦ä¸ºä¸»è¦�供应商 + * @description �Ƿ�Ϊ��Ҫ��Ӧ�� * @default false */ is_primary: boolean; /** * Contact Person - * @description è�”系人 + * @description ��ϵ�� */ contact_person?: string | null; /** * Contact Phone - * @description è�”系电è¯� + * @description ��ϵ�绰 */ contact_phone?: string | null; /** * Lead Time - * @description 交货周期(天) + * @description �������ڣ��죩 */ lead_time?: number | null; /** * Min Order Quantity - * @description 最å°�订购é‡� + * @description �������� */ min_order_quantity?: number | null; }; /** * MaterialSupplierResponse - * @description 物料供应商关è�”çš„å“�应模型 + * @description ���Ϲ�Ӧ�̹�������Ӧģ�� */ MaterialSupplierResponse: { /** Id */ @@ -2036,63 +1814,6 @@ export interface components { */ updated_at: string; }; - /** MoldSize */ - MoldSize: { - /** - * Length - * @default 300 - */ - length: number; - /** - * Width - * @default 300 - */ - width: number; - /** - * Height - * @default 200 - */ - height: number; - }; - /** MoldSystemDesignRequest */ - MoldSystemDesignRequest: { - mold_size?: components["schemas"]["MoldSize"]; - product_bbox?: components["schemas"]["BBox3D"]; - /** - * Material - * @default ABS - */ - material: string; - /** - * Cavity Count - * @default 1 - */ - cavity_count: number; - /** - * Gate Type - * @default auto - */ - gate_type: string; - /** Cycle Time Target */ - cycle_time_target?: number | null; - /** Layout Positions */ - layout_positions?: number[][] | null; - }; - /** OptimizeLayoutRequest */ - OptimizeLayoutRequest: { - product_bbox?: components["schemas"]["BBox3D"]; - /** - * Cavity Count - * @default 1 - */ - cavity_count: number; - mold_base_size?: components["schemas"]["BBox3D"] | null; - /** - * Layout Type - * @default auto - */ - layout_type: string; - }; /** PaginatedResponse[FinanceTransactionResponse] */ PaginatedResponse_FinanceTransactionResponse_: { /** Items */ @@ -2268,7 +1989,7 @@ export interface components { }; /** * PriceHistoryItem - * @description 价格历å�²é¡¹ + * @description �۸���ʷ�� */ PriceHistoryItem: { /** @@ -2309,7 +2030,7 @@ export interface components { category?: string | null; /** * Unit - * @default ä»¶ + * @default �� */ unit: string; /** @@ -2423,30 +2144,30 @@ export interface components { }; /** * PurchaseDemandCalculateRequest - * @description 计算采购需求的请求体 + * @description ����ɹ������������ */ PurchaseDemandCalculateRequest: { /** * Sales Order Ids - * @description 销售订å�•ID列表 + * @description ���۶���ID�б� */ sales_order_ids: number[]; }; /** * PurchaseDemandConvertItem - * @description 待转采购å�•çš„å�•æ�¡éœ€æ±‚ + * @description ��ת�ɹ����ĵ������� */ PurchaseDemandConvertItem: { /** Material Id */ material_id: number; /** * Quantity - * @description 采购数é‡�(通常å�–缺å�£é‡�) + * @description �ɹ�������ͨ��ȡȱ������ */ quantity: number | string; /** * Unit Cost - * @description å�•ä»· + * @description ���� */ unit_cost: number | string; /** Supplier Id */ @@ -2454,7 +2175,7 @@ export interface components { }; /** * PurchaseDemandConvertRequest - * @description 一键生æˆ�采购å�•请求(按 supplier_id 分组,æ¯�组生æˆ�一张è�‰ç¨¿é‡‡è´­å�•) + * @description һ�����ɲɹ������󣨰� supplier_id ���飬ÿ������һ�Ųݸ�ɹ����� */ PurchaseDemandConvertRequest: { /** Items */ @@ -2466,21 +2187,21 @@ export interface components { }; /** * PurchaseDemandConvertResponse - * @description 一键生æˆ�采购å�•结果 + * @description һ�����ɲɹ������ */ PurchaseDemandConvertResponse: { /** Created Orders */ created_orders?: components["schemas"]["PurchaseOrderCreatedResponse"][]; /** * Skipped - * @description å› æ•°é‡�<=0被跳过的æ�¡ç›®æ•° + * @description ������<=0����������Ŀ�� * @default 0 */ skipped: number; }; /** * PurchaseDemandItemResponse - * @description å�•个物料的采购建议 + * @description �������ϵIJɹ����� */ PurchaseDemandItemResponse: { /** Material Id */ @@ -2491,72 +2212,72 @@ export interface components { material_name: string; /** * Required Quantity - * @description BOM 需求é‡� + * @description BOM ������ */ required_quantity: string; /** * Available Quantity - * @description 当å‰�库存é‡� + * @description ��ǰ����� */ available_quantity: string; /** * Shortage Quantity - * @description 缺å�£æ•°é‡� = required - available + * @description ȱ������ = required - available */ shortage_quantity: string; /** * Unit Cost - * @description 物料å�•ä»· + * @description ���ϵ��� */ unit_cost: string; /** * Estimated Cost - * @description 预计采购金é¢� = shortage × unit_cost + * @description Ԥ�Ʋɹ���� = shortage �� unit_cost */ estimated_cost: string; /** * Suggested Supplier Id - * @description 建议供应商ID + * @description ���鹩Ӧ��ID */ suggested_supplier_id?: number | null; /** * Suggested Supplier Name - * @description 建议供应商å��ç§° + * @description ���鹩Ӧ������ */ suggested_supplier_name?: string | null; /** * Supplier Lead Time - * @description 供应商交货周期(天) + * @description ��Ӧ�̽�������(��) */ supplier_lead_time?: number | null; }; /** * PurchaseDemandResponse - * @description 采购需求计算结果 + * @description �ɹ���������� */ PurchaseDemandResponse: { /** Items */ items?: components["schemas"]["PurchaseDemandItemResponse"][]; /** * Total Estimated Cost - * @description 预计采购总金é¢� + * @description Ԥ�Ʋɹ��ܽ�� * @default 0 */ total_estimated_cost: string; /** * Shortage Count - * @description 缺货物料ç§�类数 + * @description ȱ������������ * @default 0 */ shortage_count: number; /** * Source Order Ids - * @description æ�¥æº�销售订å�•ID + * @description ��Դ���۶���ID */ source_order_ids?: number[]; /** * Source Order Nos - * @description æ�¥æº�销售订å�•ç¼–å�· + * @description ��Դ���۶������ */ source_order_nos?: string[]; }; @@ -2573,7 +2294,7 @@ export interface components { }; /** * PurchaseOrderCreatedResponse - * @description 已创建的采购å�•摘è¦� + * @description �Ѵ����IJɹ���ժҪ */ PurchaseOrderCreatedResponse: { /** Purchase Order Id */ @@ -2636,12 +2357,12 @@ export interface components { product_id: number; /** * Quantity - * @description 采购数é‡� + * @description �ɹ����� */ quantity: number; /** * Unit Price - * @description å�•价(å�¯é€‰ï¼Œä¸�填则使用物料æˆ�本价格) + * @description ���ۣ���ѡ��������ʹ�����ϳɱ��۸� */ unit_price?: number | string | null; /** Remark */ @@ -2898,7 +2619,7 @@ export interface components { product_category?: string | null; /** * Product Unit - * @default ä»¶ + * @default �� */ product_unit: string | null; /** Quantity */ @@ -3077,42 +2798,6 @@ export interface components { token_type: string; user: components["schemas"]["UserResponse"]; }; - /** ToolSpec */ - ToolSpec: { - /** - * Diameter - * @default 10 - */ - diameter: number; - /** - * Flute Length - * @default 30 - */ - flute_length: number; - /** - * Shank Diameter - * @default 10 - */ - shank_diameter: number; - }; - /** ToolpathOptimizeRequest */ - ToolpathOptimizeRequest: { - /** Toolpath Points */ - toolpath_points?: number[][]; - /** Cutting Params */ - cutting_params?: { - [key: string]: unknown; - }; - stock_bbox?: components["schemas"]["BBox3D"] | null; - }; - /** UndercutDetectRequest */ - UndercutDetectRequest: { - /** Task Id */ - task_id: string; - /** Parting Direction */ - parting_direction?: number[]; - mold_size?: components["schemas"]["MoldSize"]; - }; /** UserCreate */ UserCreate: { /** Username */ @@ -4044,171 +3729,6 @@ export interface operations { }; }; }; - optimize_cavity_layout_api_optimize_layout_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["OptimizeLayoutRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - design_cooling_system_api_design_cooling_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CoolingDesignRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - design_gating_system_api_design_gating_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["GatingDesignRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - design_complete_mold_system_api_design_mold_system_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["MoldSystemDesignRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - detect_undercuts_api_detect_undercuts_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UndercutDetectRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; estimate_cost_api_cost_estimate_post: { parameters: { query?: never; @@ -4242,268 +3762,6 @@ export interface operations { }; }; }; - design_mold_cam_api_design_cam_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CamDesignRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - check_toolpath_collision_api_check_collision_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CollisionCheckRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - optimize_toolpath_api_optimize_toolpath_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ToolpathOptimizeRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - design_edm_electrodes_api_design_electrodes_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ElectrodeDesignRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - simulate_machining_api_simulate_machining_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["MachiningSimulateRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - export_mold_results_api_export_mold_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ExportMoldRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - download_export_file_api_export_download__filepath__get: { - parameters: { - query: { - task_id: string; - }; - header?: never; - path: { - filepath: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_export_recommendations_api_export_recommendations_get: { - parameters: { - query?: { - target?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; aluminum_current_price_api_aluminum_price_current_get: { parameters: { query?: never; @@ -4555,6 +3813,72 @@ export interface operations { }; }; }; + submit_feedback_api_tasks__task_id__experience_feedback_post: { + parameters: { + query?: never; + header?: never; + path: { + task_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ExperienceFeedbackCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ExperienceFeedbackResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_experience_hints_api_tasks__task_id__experience_hints_get: { + parameters: { + query?: never; + header?: never; + path: { + task_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ExperienceHintsResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; get_html_report_html__filename__get: { parameters: { query?: never; diff --git a/openapi.json b/openapi.json index 13eb196..054b971 100644 --- a/openapi.json +++ b/openapi.json @@ -8,7 +8,7 @@ "/api/auth/login": { "post": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Login", "operationId": "login_api_auth_login_post", @@ -49,7 +49,7 @@ "/api/auth/login/json": { "post": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Login Json", "operationId": "login_json_api_auth_login_json_post", @@ -90,7 +90,7 @@ "/api/auth/me": { "get": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Get Current User Info", "operationId": "get_current_user_info_api_auth_me_get", @@ -116,7 +116,7 @@ "/api/auth/logout": { "post": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Logout", "operationId": "logout_api_auth_logout_post", @@ -135,7 +135,7 @@ "/api/auth/users": { "get": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "List Users", "operationId": "list_users_api_auth_users_get", @@ -163,7 +163,7 @@ }, "post": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Create User", "operationId": "create_user_api_auth_users_post", @@ -209,7 +209,7 @@ "/api/auth/users/{user_id}": { "put": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Update User", "operationId": "update_user_api_auth_users__user_id__put", @@ -264,7 +264,7 @@ }, "delete": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Delete User", "operationId": "delete_user_api_auth_users__user_id__delete", @@ -309,7 +309,7 @@ "/api/auth/users/{user_id}/reset-password": { "put": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Reset User Password", "operationId": "reset_user_password_api_auth_users__user_id__reset_password_put", @@ -364,7 +364,7 @@ "/api/auth/roles": { "get": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "List Roles", "operationId": "list_roles_api_auth_roles_get", @@ -392,7 +392,7 @@ }, "post": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Create Role", "operationId": "create_role_api_auth_roles_post", @@ -438,7 +438,7 @@ "/api/auth/roles/{role_id}": { "put": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Update Role", "operationId": "update_role_api_auth_roles__role_id__put", @@ -493,7 +493,7 @@ }, "delete": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Delete Role", "operationId": "delete_role_api_auth_roles__role_id__delete", @@ -538,7 +538,7 @@ "/api/auth/roles/{role_id}/permissions": { "put": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Set Role Permissions", "operationId": "set_role_permissions_api_auth_roles__role_id__permissions_put", @@ -597,7 +597,7 @@ "/api/auth/permissions": { "get": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "List Permissions", "operationId": "list_permissions_api_auth_permissions_get", @@ -625,7 +625,7 @@ }, "post": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Create Permission", "operationId": "create_permission_api_auth_permissions_post", @@ -671,7 +671,7 @@ "/api/auth/permissions/{permission_id}": { "delete": { "tags": [ - "认è¯�" + "ÈÏÖ¤" ], "summary": "Delete Permission", "operationId": "delete_permission_api_auth_permissions__permission_id__delete", @@ -746,7 +746,7 @@ "/api/upload": { "post": { "summary": "Upload Stp", - "description": "上传STP文件并存储到数æ�®åº“", + "description": "ÉÏ´«STPÎļþ²¢´æ´¢µ½Êý¾Ý¿â", "operationId": "upload_stp_api_upload_post", "requestBody": { "content": { @@ -788,7 +788,7 @@ "/api/batch-upload": { "post": { "summary": "Batch Upload", - "description": "批é‡�上传多个 STP 文件,æ¯�个文件创建独立分æž�任务,用 batch_id è�šå�ˆã€‚", + "description": "ÅúÁ¿ÉÏ´«¶à¸ö STP Îļþ£¬Ã¿¸öÎļþ´´½¨¶ÀÁ¢·ÖÎöÈÎÎñ£¬Óà batch_id ¾ÛºÏ¡£", "operationId": "batch_upload_api_batch_upload_post", "requestBody": { "content": { @@ -830,7 +830,7 @@ "/api/batch/{batch_id}": { "get": { "summary": "Get Batch Status", - "description": "è�šå�ˆæŸ¥è¯¢æ‰¹é‡�任务进度(D7:以 PG 为å�•一事实æº�,按 batch_id è�šå�ˆï¼›Redis 仅热缓存)", + "description": "¾ÛºÏ²éѯÅúÁ¿ÈÎÎñ½ø¶È£¨D7£ºÒÔ PG Ϊµ¥Ò»ÊÂʵԴ£¬°´ batch_id ¾ÛºÏ£»Redis ½öÈÈ»º´æ£©", "operationId": "get_batch_status_api_batch__batch_id__get", "security": [ { @@ -873,7 +873,7 @@ "/api/status/{task_id}": { "post": { "summary": "Get Status", - "description": "获å�–任务状æ€�(需登录,且仅任务所有者å�¯è®¿é—®ï¼‰\n\n优先返回内存中的任务信æ�¯ï¼›\n如果内存中ä¸�存在,则从 PostgreSQL + RustFS 组装一个æŒ�久化的任务视图,\n结构与内存任务ä¿�æŒ�å°½é‡�一致,便于å‰�端集中展示总结性信æ�¯ã€‚", + "description": "»ñÈ¡ÈÎÎñ״̬£¨ÐèµÇ¼£¬ÇÒ½öÈÎÎñËùÓÐÕ߿ɷÃÎÊ£©\n\nÓÅÏÈ·µ»ØÄÚ´æÖеÄÈÎÎñÐÅÏ¢£»\nÈç¹ûÄÚ´æÖв»´æÔÚ£¬Ôò´Ó PostgreSQL + RustFS ×é×°Ò»¸ö³Ö¾Ã»¯µÄÈÎÎñÊÓͼ£¬\n½á¹¹ÓëÄÚ´æÈÎÎñ±£³Ö¾¡Á¿Ò»Ö£¬±ãÓÚǰ¶Ë¼¯ÖÐչʾ×ܽáÐÔÐÅÏ¢¡£", "operationId": "get_status_api_status__task_id__post", "security": [ { @@ -914,7 +914,7 @@ }, "get": { "summary": "Get Status", - "description": "获å�–任务状æ€�(需登录,且仅任务所有者å�¯è®¿é—®ï¼‰\n\n优先返回内存中的任务信æ�¯ï¼›\n如果内存中ä¸�存在,则从 PostgreSQL + RustFS 组装一个æŒ�久化的任务视图,\n结构与内存任务ä¿�æŒ�å°½é‡�一致,便于å‰�端集中展示总结性信æ�¯ã€‚", + "description": "»ñÈ¡ÈÎÎñ״̬£¨ÐèµÇ¼£¬ÇÒ½öÈÎÎñËùÓÐÕ߿ɷÃÎÊ£©\n\nÓÅÏÈ·µ»ØÄÚ´æÖеÄÈÎÎñÐÅÏ¢£»\nÈç¹ûÄÚ´æÖв»´æÔÚ£¬Ôò´Ó PostgreSQL + RustFS ×é×°Ò»¸ö³Ö¾Ã»¯µÄÈÎÎñÊÓͼ£¬\n½á¹¹ÓëÄÚ´æÈÎÎñ±£³Ö¾¡Á¿Ò»Ö£¬±ãÓÚǰ¶Ë¼¯ÖÐչʾ×ܽáÐÔÐÅÏ¢¡£", "operationId": "get_status_api_status__task_id__get", "security": [ { @@ -957,7 +957,7 @@ "/api/history": { "get": { "summary": "Get File History", - "description": "获å�–当å‰�用户按文件å��分组的文件历å�²è®°å½•(支æŒ�多上传)", + "description": "»ñÈ¡µ±Ç°Óû§°´ÎļþÃû·Ö×éµÄÎļþÀúÊ·¼Ç¼£¨Ö§³Ö¶àÉÏ´«£©", "operationId": "get_file_history_api_history_get", "responses": { "200": { @@ -977,7 +977,7 @@ }, "post": { "summary": "Get File History", - "description": "获å�–当å‰�用户按文件å��分组的文件历å�²è®°å½•(支æŒ�多上传)", + "description": "»ñÈ¡µ±Ç°Óû§°´ÎļþÃû·Ö×éµÄÎļþÀúÊ·¼Ç¼£¨Ö§³Ö¶àÉÏ´«£©", "operationId": "get_file_history_api_history_post", "responses": { "200": { @@ -999,7 +999,7 @@ "/api/history/{filename}": { "post": { "summary": "Get File Records", - "description": "获å�–当å‰�用户指定文件å��的所有上传记录(支æŒ�多上传历å�²ï¼‰", + "description": "»ñÈ¡µ±Ç°Óû§Ö¸¶¨ÎļþÃûµÄËùÓÐÉÏ´«¼Ç¼£¨Ö§³Ö¶àÉÏ´«ÀúÊ·£©", "operationId": "get_file_records_api_history__filename__post", "security": [ { @@ -1040,7 +1040,7 @@ }, "get": { "summary": "Get File Records", - "description": "获å�–当å‰�用户指定文件å��的所有上传记录(支æŒ�多上传历å�²ï¼‰", + "description": "»ñÈ¡µ±Ç°Óû§Ö¸¶¨ÎļþÃûµÄËùÓÐÉÏ´«¼Ç¼£¨Ö§³Ö¶àÉÏ´«ÀúÊ·£©", "operationId": "get_file_records_api_history__filename__get", "security": [ { @@ -1083,7 +1083,7 @@ "/api/cam/plan": { "post": { "summary": "Generate Cam Plan", - "description": "基于任务分模结果生æˆ� CAM 准备包(MVP)。", + "description": "»ùÓÚÈÎÎñ·ÖÄ£½á¹ûÉú³É CAM ×¼±¸°ü£¨MVP£©¡£", "operationId": "generate_cam_plan_api_cam_plan_post", "requestBody": { "content": { @@ -1122,215 +1122,10 @@ ] } }, - "/api/optimize-layout": { - "post": { - "summary": "Optimize Cavity Layout", - "operationId": "optimize_cavity_layout_api_optimize_layout_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OptimizeLayoutRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/design-cooling": { - "post": { - "summary": "Design Cooling System", - "operationId": "design_cooling_system_api_design_cooling_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CoolingDesignRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/design-gating": { - "post": { - "summary": "Design Gating System", - "operationId": "design_gating_system_api_design_gating_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GatingDesignRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/design-mold-system": { - "post": { - "summary": "Design Complete Mold System", - "operationId": "design_complete_mold_system_api_design_mold_system_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MoldSystemDesignRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/detect-undercuts": { - "post": { - "summary": "Detect Undercuts", - "operationId": "detect_undercuts_api_detect_undercuts_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UndercutDetectRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, "/api/cost-estimate": { "post": { "summary": "Estimate Cost", - "description": "模具æˆ�本估算:优先使用 LLM,未å�¯ç”¨æ—¶é™�级为规则å¼�ä¼°ç®—", + "description": "Ä£¾ß³É±¾¹ÀË㣺ÓÅÏÈʹÓà LLM£¬Î´ÆôÓÃʱ½µ¼¶Îª¹æÔòʽ¹ÀËã", "operationId": "estimate_cost_api_cost_estimate_post", "requestBody": { "content": { @@ -1369,350 +1164,10 @@ ] } }, - "/api/design-cam": { - "post": { - "summary": "Design Mold Cam", - "operationId": "design_mold_cam_api_design_cam_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CamDesignRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/check-collision": { - "post": { - "summary": "Check Toolpath Collision", - "operationId": "check_toolpath_collision_api_check_collision_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CollisionCheckRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/optimize-toolpath": { - "post": { - "summary": "Optimize Toolpath", - "operationId": "optimize_toolpath_api_optimize_toolpath_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ToolpathOptimizeRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/design-electrodes": { - "post": { - "summary": "Design Edm Electrodes", - "operationId": "design_edm_electrodes_api_design_electrodes_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ElectrodeDesignRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/simulate-machining": { - "post": { - "summary": "Simulate Machining", - "operationId": "simulate_machining_api_simulate_machining_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MachiningSimulateRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/export-mold": { - "post": { - "summary": "Export Mold Results", - "operationId": "export_mold_results_api_export_mold_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExportMoldRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "OAuth2PasswordBearer": [] - } - ] - } - }, - "/api/export-download/{filepath}": { - "get": { - "summary": "Download Export File", - "operationId": "download_export_file_api_export_download__filepath__get", - "security": [ - { - "OAuth2PasswordBearer": [] - } - ], - "parameters": [ - { - "name": "filepath", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Filepath" - } - }, - { - "name": "task_id", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Task Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/export-recommendations": { - "get": { - "summary": "Get Export Recommendations", - "operationId": "get_export_recommendations_api_export_recommendations_get", - "security": [ - { - "OAuth2PasswordBearer": [] - } - ], - "parameters": [ - { - "name": "target", - "in": "query", - "required": false, - "schema": { - "type": "string", - "default": "ug", - "title": "Target" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, "/api/aluminum-price/current": { "get": { "tags": [ - "é“�金属价格" + "ÂÁ½ðÊô¼Û¸ñ" ], "summary": "Aluminum Current Price", "operationId": "aluminum_current_price_api_aluminum_price_current_get", @@ -1731,7 +1186,7 @@ "/api/aluminum-price/history": { "get": { "tags": [ - "é“�金属价格" + "ÂÁ½ðÊô¼Û¸ñ" ], "summary": "Aluminum Price History", "operationId": "aluminum_price_history_api_aluminum_price_history_get", @@ -1771,9 +1226,109 @@ } } }, + "/api/tasks/{task_id}/experience-feedback": { + "post": { + "summary": "Submit Feedback", + "description": "Ìá½»·½°¸¼¶·´À¡¡£\n\nȨÏÞ£ºµÇ¼Óû§ + ÈÎÎñ¹éÊô + feedback_experience_hint¡£\nдÈëºóÓÉ·ÓÉ commit£¨D9 ±ß½ç£©+ invalidate_task_view£¨task_view 60s TTL ʧЧ£©¡£", + "operationId": "submit_feedback_api_tasks__task_id__experience_feedback_post", + "security": [ + { + "OAuth2PasswordBearer": [] + } + ], + "parameters": [ + { + "name": "task_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Task Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExperienceFeedbackCreate" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExperienceFeedbackResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/tasks/{task_id}/experience-hints": { + "get": { + "summary": "Get Experience Hints", + "description": "À­È¡¸ÃÈÎÎñµÄÍ¬Ö¸ÎÆÀúÊ· hints ÕªÒª¡£\n\nȨÏÞ£ºµÇ¼Óû§ + ÈÎÎñ¹éÊô¡£×é֪֯ʶ¶ÔËùÓÐÈ˿ɼû£¨²»ÒªÇó¹¤ÒÕ¹¤³ÌʦȨÏÞ£©¡£", + "operationId": "get_experience_hints_api_tasks__task_id__experience_hints_get", + "security": [ + { + "OAuth2PasswordBearer": [] + } + ], + "parameters": [ + { + "name": "task_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Task Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExperienceHintsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, "/html/{filename}": { "get": { - "summary": "读å�– HTML å�¯è§†åŒ–报告", + "summary": "¶ÁÈ¡ HTML ¿ÉÊÓ»¯±¨¸æ", "operationId": "get_html_report_html__filename__get", "parameters": [ { @@ -1811,8 +1366,8 @@ "/api/products": { "get": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "List Products", "operationId": "list_products_api_products_get", @@ -1923,8 +1478,8 @@ }, "post": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "Create Product", "operationId": "create_product_api_products_post", @@ -1970,11 +1525,10 @@ "/api/products/from-task/{task_id}": { "post": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "Create Product From Task", - "description": "从模具分æž�任务创建进销存æˆ�å“�,回写 stp_files.product_id(P2-1)", "operationId": "create_product_from_task_api_products_from_task__task_id__post", "security": [ { @@ -2019,8 +1573,8 @@ "/api/products/{product_id}": { "put": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "Update Product", "operationId": "update_product_api_products__product_id__put", @@ -2075,8 +1629,8 @@ }, "delete": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "Delete Product", "operationId": "delete_product_api_products__product_id__delete", @@ -2121,8 +1675,8 @@ "/api/products/{product_id}/materials": { "get": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "Get Product Bom", "operationId": "get_product_bom_api_products__product_id__materials_get", @@ -2167,8 +1721,8 @@ }, "put": { "tags": [ - "进销存", - "产å“�管ç�†" + "½øÏú´æ", + "²úÆ·¹ÜÀí" ], "summary": "Replace Product Bom", "operationId": "replace_product_bom_api_products__product_id__materials_put", @@ -2225,8 +1779,8 @@ "/api/suppliers": { "get": { "tags": [ - "进销存", - "供应商管ç�†" + "½øÏú´æ", + "¹©Ó¦É̹ÜÀí" ], "summary": "List Suppliers", "operationId": "list_suppliers_api_suppliers_get", @@ -2305,8 +1859,8 @@ }, "post": { "tags": [ - "进销存", - "供应商管ç�†" + "½øÏú´æ", + "¹©Ó¦É̹ÜÀí" ], "summary": "Create Supplier", "operationId": "create_supplier_api_suppliers_post", @@ -2352,8 +1906,8 @@ "/api/suppliers/{supplier_id}": { "put": { "tags": [ - "进销存", - "供应商管ç�†" + "½øÏú´æ", + "¹©Ó¦É̹ÜÀí" ], "summary": "Update Supplier", "operationId": "update_supplier_api_suppliers__supplier_id__put", @@ -2408,8 +1962,8 @@ }, "delete": { "tags": [ - "进销存", - "供应商管ç�†" + "½øÏú´æ", + "¹©Ó¦É̹ÜÀí" ], "summary": "Delete Supplier", "operationId": "delete_supplier_api_suppliers__supplier_id__delete", @@ -2454,8 +2008,8 @@ "/api/customers": { "get": { "tags": [ - "进销存", - "客户管ç�†" + "½øÏú´æ", + "¿Í»§¹ÜÀí" ], "summary": "List Customers", "operationId": "list_customers_api_customers_get", @@ -2534,8 +2088,8 @@ }, "post": { "tags": [ - "进销存", - "客户管ç�†" + "½øÏú´æ", + "¿Í»§¹ÜÀí" ], "summary": "Create Customer", "operationId": "create_customer_api_customers_post", @@ -2581,8 +2135,8 @@ "/api/customers/{customer_id}": { "put": { "tags": [ - "进销存", - "客户管ç�†" + "½øÏú´æ", + "¿Í»§¹ÜÀí" ], "summary": "Update Customer", "operationId": "update_customer_api_customers__customer_id__put", @@ -2637,8 +2191,8 @@ }, "delete": { "tags": [ - "进销存", - "客户管ç�†" + "½øÏú´æ", + "¿Í»§¹ÜÀí" ], "summary": "Delete Customer", "operationId": "delete_customer_api_customers__customer_id__delete", @@ -2683,8 +2237,8 @@ "/api/warehouses": { "get": { "tags": [ - "进销存", - "仓库管ç�†" + "½øÏú´æ", + "²Ö¿â¹ÜÀí" ], "summary": "List Warehouses", "operationId": "list_warehouses_api_warehouses_get", @@ -2712,8 +2266,8 @@ }, "post": { "tags": [ - "进销存", - "仓库管ç�†" + "½øÏú´æ", + "²Ö¿â¹ÜÀí" ], "summary": "Create Warehouse", "operationId": "create_warehouse_api_warehouses_post", @@ -2759,8 +2313,8 @@ "/api/inventory": { "get": { "tags": [ - "进销存", - "库存管ç�†" + "½øÏú´æ", + "¿â´æ¹ÜÀí" ], "summary": "List Inventory", "operationId": "list_inventory_api_inventory_get", @@ -2861,8 +2415,8 @@ }, "post": { "tags": [ - "进销存", - "库存管ç�†" + "½øÏú´æ", + "¿â´æ¹ÜÀí" ], "summary": "Create Inventory", "operationId": "create_inventory_api_inventory_post", @@ -2908,8 +2462,8 @@ "/api/inventory/{inventory_id}": { "put": { "tags": [ - "进销存", - "库存管ç�†" + "½øÏú´æ", + "¿â´æ¹ÜÀí" ], "summary": "Update Inventory", "operationId": "update_inventory_api_inventory__inventory_id__put", @@ -2964,8 +2518,8 @@ }, "delete": { "tags": [ - "进销存", - "库存管ç�†" + "½øÏú´æ", + "¿â´æ¹ÜÀí" ], "summary": "Delete Inventory", "operationId": "delete_inventory_api_inventory__inventory_id__delete", @@ -3010,8 +2564,8 @@ "/api/stock-movements": { "post": { "tags": [ - "进销存", - "库存å�˜åЍ" + "½øÏú´æ", + "¿â´æ±ä¶¯" ], "summary": "Create Stock Movement", "operationId": "create_stock_movement_api_stock_movements_post", @@ -3055,8 +2609,8 @@ }, "get": { "tags": [ - "进销存", - "库存å�˜åЍ" + "½øÏú´æ", + "¿â´æ±ä¶¯" ], "summary": "List Stock Movements", "operationId": "list_stock_movements_api_stock_movements_get", @@ -3149,8 +2703,8 @@ "/api/purchase-orders": { "get": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "List Purchase Orders", "operationId": "list_purchase_orders_api_purchase_orders_get", @@ -3225,8 +2779,8 @@ }, "post": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "Create Purchase Order", "operationId": "create_purchase_order_api_purchase_orders_post", @@ -3272,8 +2826,8 @@ "/api/purchase-orders/{order_id}": { "get": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "Get Purchase Order Detail", "operationId": "get_purchase_order_detail_api_purchase_orders__order_id__get", @@ -3318,8 +2872,8 @@ }, "put": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "Update Purchase Order", "operationId": "update_purchase_order_api_purchase_orders__order_id__put", @@ -3374,8 +2928,8 @@ }, "delete": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "Delete Purchase Order", "operationId": "delete_purchase_order_api_purchase_orders__order_id__delete", @@ -3420,8 +2974,8 @@ "/api/purchase-orders/{order_id}/status": { "patch": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "Update Purchase Order Status", "operationId": "update_purchase_order_status_api_purchase_orders__order_id__status_patch", @@ -3478,8 +3032,8 @@ "/api/purchase-orders/{order_id}/receive": { "post": { "tags": [ - "进销存", - "采购订å�•" + "½øÏú´æ", + "²É¹º¶©µ¥" ], "summary": "Receive Purchase Order", "operationId": "receive_purchase_order_api_purchase_orders__order_id__receive_post", @@ -3536,8 +3090,8 @@ "/api/sales-orders": { "get": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "List Sales Orders", "operationId": "list_sales_orders_api_sales_orders_get", @@ -3612,8 +3166,8 @@ }, "post": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Create Sales Order", "operationId": "create_sales_order_api_sales_orders_post", @@ -3659,8 +3213,8 @@ "/api/sales-orders/{order_id}": { "get": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Get Sales Order Detail", "operationId": "get_sales_order_detail_api_sales_orders__order_id__get", @@ -3705,8 +3259,8 @@ }, "put": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Update Sales Order", "operationId": "update_sales_order_api_sales_orders__order_id__put", @@ -3761,8 +3315,8 @@ }, "delete": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Delete Sales Order", "operationId": "delete_sales_order_api_sales_orders__order_id__delete", @@ -3807,8 +3361,8 @@ "/api/sales-orders/{order_id}/status": { "patch": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Update Sales Order Status", "operationId": "update_sales_order_status_api_sales_orders__order_id__status_patch", @@ -3865,11 +3419,11 @@ "/api/sales-orders/{order_id}/consume-materials": { "post": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Consume Materials", - "description": "记录销售订å�•的物料消耗(在已å�‘料基础上记录é¢�外消耗,如报废/超耗)", + "description": "¼Ç¼ÏúÊÛ¶©µ¥µÄÎïÁÏÏûºÄ£¨ÔÚÒÑ·¢ÁÏ»ù´¡ÉϼǼ¶îÍâÏûºÄ£¬È籨·Ï/³¬ºÄ£©", "operationId": "consume_materials_api_sales_orders__order_id__consume_materials_post", "security": [ { @@ -3922,8 +3476,8 @@ "/api/sales-orders/{order_id}/production-plan": { "get": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Get Sales Order Production Plan", "operationId": "get_sales_order_production_plan_api_sales_orders__order_id__production_plan_get", @@ -3970,8 +3524,8 @@ "/api/sales-orders/{order_id}/issue-materials": { "post": { "tags": [ - "进销存", - "销售订å�•" + "½øÏú´æ", + "ÏúÊÛ¶©µ¥" ], "summary": "Issue Sales Order Materials", "operationId": "issue_sales_order_materials_api_sales_orders__order_id__issue_materials_post", @@ -4028,8 +3582,8 @@ "/api/materials/{product_id}/price-history": { "post": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Add Material Price History", "operationId": "add_material_price_history_api_materials__product_id__price_history_post", @@ -4084,8 +3638,8 @@ }, "get": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Get Material Price History", "operationId": "get_material_price_history_api_materials__product_id__price_history_get", @@ -4148,8 +3702,8 @@ "/api/materials/{product_id}/price-trend": { "get": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Get Material Price Trend", "operationId": "get_material_price_trend_api_materials__product_id__price_trend_get", @@ -4208,8 +3762,8 @@ "/api/materials/{product_id}/suppliers": { "post": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Add Material Supplier", "operationId": "add_material_supplier_api_materials__product_id__suppliers_post", @@ -4264,8 +3818,8 @@ }, "get": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Get Material Suppliers", "operationId": "get_material_suppliers_api_materials__product_id__suppliers_get", @@ -4316,8 +3870,8 @@ "/api/materials/suppliers/{supplier_id}": { "delete": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Remove Material Supplier", "operationId": "remove_material_supplier_api_materials_suppliers__supplier_id__delete", @@ -4362,8 +3916,8 @@ "/api/materials/suppliers/{supplier_id}/materials": { "get": { "tags": [ - "进销存", - "物料管ç�†" + "½øÏú´æ", + "ÎïÁϹÜÀí" ], "summary": "Get Supplier Materials", "operationId": "get_supplier_materials_api_materials_suppliers__supplier_id__materials_get", @@ -4414,11 +3968,11 @@ "/api/purchase-demands/calculate": { "post": { "tags": [ - "进销存", - "采购需求推导" + "½øÏú´æ", + "²É¹ºÐèÇóÍÆµ¼" ], "summary": "Calculate Purchase Demands", - "description": "æ ¹æ�®é”€å”®è®¢å�• ID 列表,自动推导采购需求(BOM 展开 → 库存对比 → 供应商推è��)", + "description": "¸ù¾ÝÏúÊÛ¶©µ¥ ID ÁÐ±í£¬×Ô¶¯ÍƵ¼²É¹ºÐèÇó£¨BOM Õ¹¿ª ¡ú ¿â´æ¶Ô±È ¡ú ¹©Ó¦ÉÌÍÆ¼ö£©", "operationId": "calculate_purchase_demands_api_purchase_demands_calculate_post", "requestBody": { "content": { @@ -4462,11 +4016,11 @@ "/api/purchase-demands/convert": { "post": { "tags": [ - "进销存", - "采购需求推导" + "½øÏú´æ", + "²É¹ºÐèÇóÍÆµ¼" ], "summary": "Convert Purchase Demands", - "description": "将采购需求一键转æ�¢ä¸ºé‡‡è´­å�•(按供应商分组,æ¯�组生æˆ�一张è�‰ç¨¿é‡‡è´­å�•)", + "description": "½«²É¹ºÐèÇóÒ»¼üת»»Îª²É¹ºµ¥£¨°´¹©Ó¦ÉÌ·Ö×飬ÿ×éÉú³ÉÒ»ÕŲݸå²É¹ºµ¥£©", "operationId": "convert_purchase_demands_api_purchase_demands_convert_post", "requestBody": { "content": { @@ -4510,8 +4064,8 @@ "/api/dashboard": { "get": { "tags": [ - "进销存", - "仪表盘" + "½øÏú´æ", + "ÒDZíÅÌ" ], "summary": "Get Dashboard", "operationId": "get_dashboard_api_dashboard_get", @@ -4535,8 +4089,8 @@ "/api/finance/receipts": { "post": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "Create Receipt", "operationId": "create_receipt_api_finance_receipts_post", @@ -4582,8 +4136,8 @@ "/api/finance/payments": { "post": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "Create Payment", "operationId": "create_payment_api_finance_payments_post", @@ -4629,8 +4183,8 @@ "/api/finance/transactions": { "get": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "List Transactions", "operationId": "list_transactions_api_finance_transactions_get", @@ -4760,8 +4314,8 @@ "/api/finance/transactions/{transaction_id}/void": { "post": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "Void Transaction", "operationId": "void_transaction_api_finance_transactions__transaction_id__void_post", @@ -4806,8 +4360,8 @@ "/api/finance/receivables": { "get": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "List Receivables", "operationId": "list_receivables_api_finance_receivables_get", @@ -4908,8 +4462,8 @@ "/api/finance/payables": { "get": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "List Payables", "operationId": "list_payables_api_finance_payables_get", @@ -5010,8 +4564,8 @@ "/api/finance/summary": { "get": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "Get Finance Summary", "operationId": "get_finance_summary_api_finance_summary_get", @@ -5085,8 +4639,8 @@ "/api/finance/partner-statement/{partner_type}": { "get": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "Get Partner Statement", "operationId": "get_partner_statement_api_finance_partner_statement__partner_type__get", @@ -5169,8 +4723,8 @@ "/api/finance/partner-product-statement/{partner_type}": { "get": { "tags": [ - "进销存", - "财务管ç�†" + "½øÏú´æ", + "²ÆÎñ¹ÜÀí" ], "summary": "Get Partner Product Statement", "operationId": "get_partner_product_statement_api_finance_partner_product_statement__partner_type__get", @@ -5300,47 +4854,6 @@ }, "components": { "schemas": { - "BBox3D": { - "properties": { - "dimensions": { - "items": { - "type": "number" - }, - "type": "array", - "title": "Dimensions" - }, - "min": { - "anyOf": [ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Min" - }, - "max": { - "anyOf": [ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Max" - } - }, - "type": "object", - "title": "BBox3D" - }, "Body_batch_upload_api_batch_upload_post": { "properties": { "files": { @@ -5481,33 +4994,6 @@ ], "title": "Body_upload_stp_api_upload_post" }, - "CamDesignRequest": { - "properties": { - "cavity_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "stock_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "mold_steel": { - "type": "string", - "title": "Mold Steel", - "default": "P20" - }, - "surface_quality": { - "type": "string", - "title": "Surface Quality", - "default": "standard" - }, - "controller": { - "type": "string", - "title": "Controller", - "default": "fanuc" - } - }, - "type": "object", - "title": "CamDesignRequest" - }, "CamPlanRequest": { "properties": { "task_id": { @@ -5575,81 +5061,7 @@ "task_id" ], "title": "CamPlanRequest", - "description": "未æ��供的å��好字段回è�½åˆ°ä»»åŠ¡æŒ�久化å��好,å†�回è�½åˆ°é»˜è®¤å€¼ã€‚" - }, - "CollisionCheckRequest": { - "properties": { - "toolpath_points": { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array", - "title": "Toolpath Points" - }, - "tool": { - "$ref": "#/components/schemas/ToolSpec" - }, - "stock_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "clamp_positions": { - "anyOf": [ - { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Clamp Positions" - } - }, - "type": "object", - "title": "CollisionCheckRequest" - }, - "CoolingDesignRequest": { - "properties": { - "mold_size": { - "$ref": "#/components/schemas/MoldSize" - }, - "product_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "material": { - "type": "string", - "title": "Material", - "default": "ABS" - }, - "cavity_count": { - "type": "integer", - "maximum": 64.0, - "minimum": 1.0, - "title": "Cavity Count", - "default": 1 - }, - "cycle_time_target": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Cycle Time Target" - } - }, - "type": "object", - "title": "CoolingDesignRequest" + "description": "δÌṩµÄÆ«ºÃ×ֶλØÂäµ½ÈÎÎñ³Ö¾Ã»¯Æ«ºÃ£¬ÔÙ»ØÂ䵽ĬÈÏÖµ¡£" }, "CostEstimateRequest": { "properties": { @@ -5803,75 +5215,205 @@ ], "title": "CustomerResponse" }, - "ElectrodeDesignRequest": { + "ExperienceFeedbackCreate": { "properties": { - "undercut_regions": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array", - "title": "Undercut Regions" - }, - "cavity_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "material": { - "type": "string", - "title": "Material", - "default": "copper" - }, - "spark_gap": { - "type": "number", - "title": "Spark Gap", - "default": 0.05 - }, - "overburn": { - "type": "number", - "title": "Overburn", - "default": 0.1 - } - }, - "type": "object", - "title": "ElectrodeDesignRequest" - }, - "ExportMoldRequest": { - "properties": { - "task_id": { - "type": "string", - "title": "Task Id" - }, "scheme_id": { + "type": "string", + "maxLength": 64, + "minLength": 1, + "title": "Scheme Id" + }, + "feedback_status": { + "type": "string", + "enum": [ + "adopted", + "adjust", + "rejected" + ], + "title": "Feedback Status" + }, + "feedback_reason": { "anyOf": [ { - "type": "string" + "type": "string", + "maxLength": 2000 }, { "type": "null" } ], - "title": "Scheme Id" + "title": "Feedback Reason" }, - "formats": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Formats" + "adjust_suggestion": { + "anyOf": [ + { + "type": "string", + "maxLength": 2000 + }, + { + "type": "null" + } + ], + "title": "Adjust Suggestion" }, - "components": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Components" + "confidence_at_submit": { + "anyOf": [ + { + "type": "number", + "maximum": 1.0, + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Confidence At Submit" + }, + "score_at_submit": { + "anyOf": [ + { + "type": "number", + "maximum": 100.0, + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Score At Submit" } }, "type": "object", "required": [ - "task_id" + "scheme_id", + "feedback_status" ], - "title": "ExportMoldRequest" + "title": "ExperienceFeedbackCreate", + "description": "ÀÏʦ¸µ·½°¸¼¶·´À¡ÇëÇóÌå¡£" + }, + "ExperienceFeedbackResponse": { + "properties": { + "id": { + "type": "integer", + "title": "Id" + }, + "scheme_id": { + "type": "string", + "title": "Scheme Id" + }, + "scheme_axis": { + "type": "string", + "title": "Scheme Axis" + }, + "feedback_status": { + "type": "string", + "title": "Feedback Status" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + } + }, + "type": "object", + "required": [ + "id", + "scheme_id", + "scheme_axis", + "feedback_status", + "created_at" + ], + "title": "ExperienceFeedbackResponse", + "description": "·´À¡Ð´ÈëÏìÓ¦¡£" + }, + "ExperienceHintItem": { + "properties": { + "scheme_axis": { + "type": "string", + "title": "Scheme Axis" + }, + "adopted_count": { + "type": "integer", + "title": "Adopted Count" + }, + "rejected_count": { + "type": "integer", + "title": "Rejected Count" + }, + "adjust_count": { + "type": "integer", + "title": "Adjust Count" + }, + "confidence": { + "type": "number", + "title": "Confidence" + }, + "weight": { + "type": "number", + "title": "Weight" + }, + "sample_count": { + "type": "integer", + "title": "Sample Count" + } + }, + "type": "object", + "required": [ + "scheme_axis", + "adopted_count", + "rejected_count", + "adjust_count", + "confidence", + "weight", + "sample_count" + ], + "title": "ExperienceHintItem", + "description": "Í¬Ö¸ÎÆÀúÊ· hints ÕªÒª£¨°´ scheme_axis ¾ÛºÏ£©¡£" + }, + "ExperienceHintsResponse": { + "properties": { + "task_id": { + "type": "string", + "title": "Task Id" + }, + "stp_file_id": { + "type": "integer", + "title": "Stp File Id" + }, + "material_name": { + "type": "string", + "title": "Material Name" + }, + "is_foam": { + "type": "boolean", + "title": "Is Foam" + }, + "fingerprint": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Fingerprint" + }, + "hints": { + "items": { + "$ref": "#/components/schemas/ExperienceHintItem" + }, + "type": "array", + "title": "Hints" + } + }, + "type": "object", + "required": [ + "task_id", + "stp_file_id", + "material_name", + "is_foam", + "fingerprint", + "hints" + ], + "title": "ExperienceHintsResponse", + "description": "GET /experience-hints ÏìÓ¦¡£" }, "FinanceAllocationCreate": { "properties": { @@ -6274,49 +5816,6 @@ ], "title": "FinanceTransactionResponse" }, - "GatingDesignRequest": { - "properties": { - "product_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "material": { - "type": "string", - "title": "Material", - "default": "ABS" - }, - "cavity_count": { - "type": "integer", - "maximum": 64.0, - "minimum": 1.0, - "title": "Cavity Count", - "default": 1 - }, - "gate_type": { - "type": "string", - "title": "Gate Type", - "default": "auto" - }, - "layout_positions": { - "anyOf": [ - { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Layout Positions" - } - }, - "type": "object", - "title": "GatingDesignRequest" - }, "HTTPValidationError": { "properties": { "detail": { @@ -6528,28 +6027,6 @@ ], "title": "LoginRequest" }, - "MachiningSimulateRequest": { - "properties": { - "operations": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array", - "title": "Operations" - }, - "stock_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "resolution": { - "type": "number", - "title": "Resolution", - "default": 2.0 - } - }, - "type": "object", - "title": "MachiningSimulateRequest" - }, "MaterialConsumptionItem": { "properties": { "material_id": { @@ -6603,7 +6080,7 @@ "type": "number", "exclusiveMinimum": 0.0, "title": "Price", - "description": "物料价格" + "description": "ÎïÁϼ۸ñ" }, "supplier_id": { "anyOf": [ @@ -6615,7 +6092,7 @@ } ], "title": "Supplier Id", - "description": "供应商ID" + "description": "¹©Ó¦ÉÌID" }, "remark": { "anyOf": [ @@ -6627,7 +6104,7 @@ } ], "title": "Remark", - "description": "备注" + "description": "±¸×¢" } }, "type": "object", @@ -6635,7 +6112,7 @@ "price" ], "title": "MaterialPriceHistoryCreate", - "description": "创建物料价格历å�²çš„请求模型" + "description": "´´½¨ÎïÁϼ۸ñÀúÊ·µÄÇëÇóÄ£ÐÍ" }, "MaterialPriceHistoryResponse": { "properties": { @@ -6717,7 +6194,7 @@ "created_at" ], "title": "MaterialPriceHistoryResponse", - "description": "物料价格历å�²çš„å“�应模型" + "description": "ÎïÁϼ۸ñÀúÊ·µÄÏìӦģÐÍ" }, "MaterialPriceTrendResponse": { "properties": { @@ -6764,19 +6241,19 @@ "price_history" ], "title": "MaterialPriceTrendResponse", - "description": "物料价格趋势的å“�应模型" + "description": "ÎïÁϼ۸ñÇ÷ÊÆµÄÏìӦģÐÍ" }, "MaterialSupplierCreate": { "properties": { "supplier_id": { "type": "integer", "title": "Supplier Id", - "description": "供应商ID" + "description": "¹©Ó¦ÉÌID" }, "is_primary": { "type": "boolean", "title": "Is Primary", - "description": "是å�¦ä¸ºä¸»è¦�供应商", + "description": "ÊÇ·ñΪÖ÷Òª¹©Ó¦ÉÌ", "default": false }, "contact_person": { @@ -6789,7 +6266,7 @@ } ], "title": "Contact Person", - "description": "è�”系人" + "description": "ÁªÏµÈË" }, "contact_phone": { "anyOf": [ @@ -6801,7 +6278,7 @@ } ], "title": "Contact Phone", - "description": "è�”系电è¯�" + "description": "ÁªÏµµç»°" }, "lead_time": { "anyOf": [ @@ -6814,7 +6291,7 @@ } ], "title": "Lead Time", - "description": "交货周期(天)" + "description": "½»»õÖÜÆÚ£¨Ì죩" }, "min_order_quantity": { "anyOf": [ @@ -6827,7 +6304,7 @@ } ], "title": "Min Order Quantity", - "description": "最å°�订购é‡�" + "description": "×îС¶©¹ºÁ¿" } }, "type": "object", @@ -6835,7 +6312,7 @@ "supplier_id" ], "title": "MaterialSupplierCreate", - "description": "创建物料供应商关è�”的请求模型" + "description": "´´½¨ÎïÁϹ©Ó¦É̹ØÁªµÄÇëÇóÄ£ÐÍ" }, "MaterialSupplierResponse": { "properties": { @@ -6939,116 +6416,7 @@ "updated_at" ], "title": "MaterialSupplierResponse", - "description": "物料供应商关è�”çš„å“�应模型" - }, - "MoldSize": { - "properties": { - "length": { - "type": "number", - "title": "Length", - "default": 300.0 - }, - "width": { - "type": "number", - "title": "Width", - "default": 300.0 - }, - "height": { - "type": "number", - "title": "Height", - "default": 200.0 - } - }, - "type": "object", - "title": "MoldSize" - }, - "MoldSystemDesignRequest": { - "properties": { - "mold_size": { - "$ref": "#/components/schemas/MoldSize" - }, - "product_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "material": { - "type": "string", - "title": "Material", - "default": "ABS" - }, - "cavity_count": { - "type": "integer", - "maximum": 64.0, - "minimum": 1.0, - "title": "Cavity Count", - "default": 1 - }, - "gate_type": { - "type": "string", - "title": "Gate Type", - "default": "auto" - }, - "cycle_time_target": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Cycle Time Target" - }, - "layout_positions": { - "anyOf": [ - { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Layout Positions" - } - }, - "type": "object", - "title": "MoldSystemDesignRequest" - }, - "OptimizeLayoutRequest": { - "properties": { - "product_bbox": { - "$ref": "#/components/schemas/BBox3D" - }, - "cavity_count": { - "type": "integer", - "maximum": 64.0, - "minimum": 1.0, - "title": "Cavity Count", - "default": 1 - }, - "mold_base_size": { - "anyOf": [ - { - "$ref": "#/components/schemas/BBox3D" - }, - { - "type": "null" - } - ] - }, - "layout_type": { - "type": "string", - "title": "Layout Type", - "default": "auto" - } - }, - "type": "object", - "title": "OptimizeLayoutRequest" + "description": "ÎïÁϹ©Ó¦É̹ØÁªµÄÏìӦģÐÍ" }, "PaginatedResponse_FinanceTransactionResponse_": { "properties": { @@ -7605,7 +6973,7 @@ "supplier_name" ], "title": "PriceHistoryItem", - "description": "价格历å�²é¡¹" + "description": "¼Û¸ñÀúÊ·Ïî" }, "ProductBOMResponse": { "properties": { @@ -7690,7 +7058,7 @@ "unit": { "type": "string", "title": "Unit", - "default": "ä»¶" + "default": "¼þ" }, "item_type": { "type": "string", @@ -7979,7 +7347,7 @@ "type": "array", "minItems": 1, "title": "Sales Order Ids", - "description": "销售订å�•ID列表" + "description": "ÏúÊÛ¶©µ¥IDÁбí" } }, "type": "object", @@ -7987,7 +7355,7 @@ "sales_order_ids" ], "title": "PurchaseDemandCalculateRequest", - "description": "计算采购需求的请求体" + "description": "¼ÆËã²É¹ºÐèÇóµÄÇëÇóÌå" }, "PurchaseDemandConvertItem": { "properties": { @@ -8007,7 +7375,7 @@ } ], "title": "Quantity", - "description": "采购数é‡�(通常å�–缺å�£é‡�)" + "description": "²É¹ºÊýÁ¿£¨Í¨³£È¡È±¿ÚÁ¿£©" }, "unit_cost": { "anyOf": [ @@ -8021,7 +7389,7 @@ } ], "title": "Unit Cost", - "description": "å�•ä»·" + "description": "µ¥¼Û" }, "supplier_id": { "type": "integer", @@ -8036,7 +7404,7 @@ "supplier_id" ], "title": "PurchaseDemandConvertItem", - "description": "待转采购å�•çš„å�•æ�¡éœ€æ±‚" + "description": "´ýת²É¹ºµ¥µÄµ¥ÌõÐèÇó" }, "PurchaseDemandConvertRequest": { "properties": { @@ -8077,7 +7445,7 @@ "items" ], "title": "PurchaseDemandConvertRequest", - "description": "一键生æˆ�采购å�•请求(按 supplier_id 分组,æ¯�组生æˆ�一张è�‰ç¨¿é‡‡è´­å�•)" + "description": "Ò»¼üÉú³É²É¹ºµ¥ÇëÇ󣨰´ supplier_id ·Ö×飬ÿ×éÉú³ÉÒ»ÕŲݸå²É¹ºµ¥£©" }, "PurchaseDemandConvertResponse": { "properties": { @@ -8091,13 +7459,13 @@ "skipped": { "type": "integer", "title": "Skipped", - "description": "å› æ•°é‡�<=0被跳过的æ�¡ç›®æ•°", + "description": "ÒòÊýÁ¿<=0±»Ìø¹ýµÄÌõÄ¿Êý", "default": 0 } }, "type": "object", "title": "PurchaseDemandConvertResponse", - "description": "一键生æˆ�采购å�•结果" + "description": "Ò»¼üÉú³É²É¹ºµ¥½á¹û" }, "PurchaseDemandItemResponse": { "properties": { @@ -8117,31 +7485,31 @@ "type": "string", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Required Quantity", - "description": "BOM 需求é‡�" + "description": "BOM ÐèÇóÁ¿" }, "available_quantity": { "type": "string", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Available Quantity", - "description": "当å‰�库存é‡�" + "description": "µ±Ç°¿â´æÁ¿" }, "shortage_quantity": { "type": "string", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Shortage Quantity", - "description": "缺å�£æ•°é‡� = required - available" + "description": "ȱ¿ÚÊýÁ¿ = required - available" }, "unit_cost": { "type": "string", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Unit Cost", - "description": "物料å�•ä»·" + "description": "ÎïÁϵ¥¼Û" }, "estimated_cost": { "type": "string", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Estimated Cost", - "description": "预计采购金é¢� = shortage × unit_cost" + "description": "Ô¤¼Æ²É¹º½ð¶î = shortage ¡Á unit_cost" }, "suggested_supplier_id": { "anyOf": [ @@ -8153,7 +7521,7 @@ } ], "title": "Suggested Supplier Id", - "description": "建议供应商ID" + "description": "½¨Ò鹩ӦÉÌID" }, "suggested_supplier_name": { "anyOf": [ @@ -8165,7 +7533,7 @@ } ], "title": "Suggested Supplier Name", - "description": "建议供应商å��ç§°" + "description": "½¨Ò鹩ӦÉÌÃû³Æ" }, "supplier_lead_time": { "anyOf": [ @@ -8177,7 +7545,7 @@ } ], "title": "Supplier Lead Time", - "description": "供应商交货周期(天)" + "description": "¹©Ó¦É̽»»õÖÜÆÚ(Ìì)" } }, "type": "object", @@ -8192,7 +7560,7 @@ "estimated_cost" ], "title": "PurchaseDemandItemResponse", - "description": "å�•个物料的采购建议" + "description": "µ¥¸öÎïÁϵIJɹº½¨Òé" }, "PurchaseDemandResponse": { "properties": { @@ -8207,13 +7575,13 @@ "type": "string", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Estimated Cost", - "description": "预计采购总金é¢�", + "description": "Ô¤¼Æ²É¹º×ܽð¶î", "default": "0" }, "shortage_count": { "type": "integer", "title": "Shortage Count", - "description": "缺货物料ç§�类数", + "description": "ȱ»õÎïÁÏÖÖÀàÊý", "default": 0 }, "source_order_ids": { @@ -8222,7 +7590,7 @@ }, "type": "array", "title": "Source Order Ids", - "description": "æ�¥æº�销售订å�•ID" + "description": "À´Ô´ÏúÊÛ¶©µ¥ID" }, "source_order_nos": { "items": { @@ -8230,12 +7598,12 @@ }, "type": "array", "title": "Source Order Nos", - "description": "æ�¥æº�销售订å�•ç¼–å�·" + "description": "À´Ô´ÏúÊÛ¶©µ¥±àºÅ" } }, "type": "object", "title": "PurchaseDemandResponse", - "description": "采购需求计算结果" + "description": "²É¹ºÐèÇó¼ÆËã½á¹û" }, "PurchaseOrderCreate": { "properties": { @@ -8320,7 +7688,7 @@ "total_amount" ], "title": "PurchaseOrderCreatedResponse", - "description": "已创建的采购å�•摘è¦�" + "description": "ÒÑ´´½¨µÄ²É¹ºµ¥ÕªÒª" }, "PurchaseOrderDetailResponse": { "properties": { @@ -8458,7 +7826,7 @@ "type": "integer", "exclusiveMinimum": 0.0, "title": "Quantity", - "description": "采购数é‡�" + "description": "²É¹ºÊýÁ¿" }, "unit_price": { "anyOf": [ @@ -8474,7 +7842,7 @@ } ], "title": "Unit Price", - "description": "å�•价(å�¯é€‰ï¼Œä¸�填则使用物料æˆ�本价格)" + "description": "µ¥¼Û£¨¿ÉÑ¡£¬²»ÌîÔòʹÓÃÎïÁϳɱ¾¼Û¸ñ£©" }, "remark": { "anyOf": [ @@ -9310,7 +8678,7 @@ } ], "title": "Product Unit", - "default": "ä»¶" + "default": "¼þ" }, "quantity": { "type": "integer", @@ -9932,81 +9300,6 @@ ], "title": "Token" }, - "ToolSpec": { - "properties": { - "diameter": { - "type": "number", - "title": "Diameter", - "default": 10.0 - }, - "flute_length": { - "type": "number", - "title": "Flute Length", - "default": 30.0 - }, - "shank_diameter": { - "type": "number", - "title": "Shank Diameter", - "default": 10.0 - } - }, - "type": "object", - "title": "ToolSpec" - }, - "ToolpathOptimizeRequest": { - "properties": { - "toolpath_points": { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array", - "title": "Toolpath Points" - }, - "cutting_params": { - "additionalProperties": true, - "type": "object", - "title": "Cutting Params" - }, - "stock_bbox": { - "anyOf": [ - { - "$ref": "#/components/schemas/BBox3D" - }, - { - "type": "null" - } - ] - } - }, - "type": "object", - "title": "ToolpathOptimizeRequest" - }, - "UndercutDetectRequest": { - "properties": { - "task_id": { - "type": "string", - "title": "Task Id" - }, - "parting_direction": { - "items": { - "type": "number" - }, - "type": "array", - "title": "Parting Direction" - }, - "mold_size": { - "$ref": "#/components/schemas/MoldSize" - } - }, - "type": "object", - "required": [ - "task_id" - ], - "title": "UndercutDetectRequest" - }, "UserCreate": { "properties": { "username": {