46 lines
4.8 KiB
Markdown
46 lines
4.8 KiB
Markdown
|
|
# 用户端 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图总目标。
|