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 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图总目标。