Files
platforms/docs/操作日志_用户端APP_报修提交_20260907.md
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

46 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户端 App 报修提交日志
操作时间2026-09-07。操作类型扩展、修复。影响模块Flutter 用户端报修、Go 工单创建、cs_ticket三个字段。
## 本次变化
个人中心和首页报修入口原来打开只有描述的弹窗,现在进入 `/repair`按故障信息、联系与地址、确认提交分三步。故障可选阀门、报警器、泄漏、其他描述必填地址必须有完整联系人预约时间选填且必须在将来。确认前不写工单上一步和地址页返回保留输入。发送期间禁止重复点击未知结果冻结原请求并使用同一UUID重试明确校验错误后可返回修改。
后端保存fault_type、contact_name、contact_phone。联系人由当前用户地址生成快照兼容历史地址时回退本人账户不接受其他账户地址。创建在账户行锁事务内执行同一用户相同request_no返回首次工单地址归档或预约时间已过不影响重复请求。首次创建拒绝空白描述、空白/超过128字符请求号、非法故障枚举、过去预约时间服务归属数据库错误不再被忽略。旧category/description请求兼容。
## 文件与职责
| 文件 | 主要改动 |
| --- | --- |
| apps/user_app/lib/ui/features/tickets/repair_page.dart | 新增三步表单、地址/时间选择、确认、失败保持、离开提示 |
| apps/user_app/lib/ui/features/profile/profile_page.dart | _createTicket由文字弹窗改为导航 |
| apps/user_app/lib/app/router.dart | 新增/repair沿用登录守卫 |
| apps/user_app/lib/data/repositories/client_repository.dart | submitRepair返回工单UUID保留旧createTicket |
| apps/user_app/lib/domain/models/service_ticket.dart | 故障枚举中文映射 |
| apps/user_app/lib/ui/features/tickets/ticket_detail_page.dart | 显示故障类型与提交时联系人快照 |
| backend/api/internal/models/cs_ticket.go | 新增fault_type、contact_name、contact_phone默认空字符串旧记录不回填 |
| backend/api/internal/logic/client/user/address_ticket.go | CreateTicket事务、幂等、校验与快照 |
| backend/api/cmd/cli/address_migration.go、main.go | 通用定向字段迁移执行器与migrate-ticket-contact命令无全表初始化 |
| backend/api/internal/logic/client/user/ticket_create_test.go | 重试、空值、非法枚举、地址越权回归 |
| apps/user_app/test/ui/repair_page_test.dart | 分步校验、地址返回、确认前零写入、未知结果同UUID重试 |
| apps/user_app/tool/a1_visual_test.dart | 新增05多尺寸截图仍是独立Fixture |
| frontend/platform_admin/src/contracts/platform-resources.json | 通过同步脚本更新新增工单字段 |
## 实际验证
- Go全包测试、vet、CLI和API构建通过新增创建测试后Ticket相关测试通过。
- Flutter58项测试通过analyze无问题Web release构建通过。
- 05与42分别在320/360/390/430宽度及1.0/1.3文本缩放检查共16项截图/溢出检查通过已打开05原图与实现截图差距仍明显未通过严格1:1。
- 已在既有远程数据库执行migrate-ticket-contact只增加三个字段及中文COMMENT事务锁超时5秒。未修改旧工单内容、未运行全库迁移或种子未使用本机PostgreSQL/Redis容器。
- contract:sync和contract:check通过48个资源。
- 远程临时地址与工单 `TK1788793274954000000` 验证故障、联系人、地址、预约快照一致地址归档后重复提交返回同一UUID列表仅一笔工单取消及重复取消均成功。临时地址已归档工单保留取消状态原地址及原工单未修改。
- 浏览器验证登录回跳/repair、空描述拦截、输入后进入联系地址、打开真实地址列表、返回及上一步保留输入控制台error/warn为空。当前原地址缺联系人未为了浏览器测试改写用户原地址。成功提交路径证据为Widget测试加真实API验证并非浏览器整条提交验收。
## 未完成与风险
现场照片仍是可见的未开放入口,未声称上传可用。语音、采集定位、原始照片时间、持久化草稿和跨重启请求恢复尚未实现。预约目前是用户请求时间,不代表气站已承诺时段;照片与工程师完整链路也未完成。下一阶段需专用受控上传和工单证据授权,不能使用头像接口或把原图示例照片写成真实证据。
字段迁移是向后兼容的加法回退旧API时可保留列不要删除列损失已保存快照。新增联系人会包含个人信息沿用本人Client访问与后台脱敏保护。维护时保留首次请求号语义结果未知时不能重生成号自动重发。
当前10图部分实现、48图尚无对应完整页面、0图严格全功能1:1通过。操作日志记录的是本阶段实际事实不缩小58图总目标。