# 云端 TOU 模版接口实测记录 > 状态:2026-10-21,基于测试服后台网页操作抓包(`TOU模版.test.franklinwh.com.har`,含登录 token,不入库)。本文只记录观察到的事实;结论被设计采纳后写入 technical-design。 ## 1. 抓包范围 操作顺序:查询省/州 → 新建模版 → 列表 → 查看详情 → 打开编辑(未保存)→ 发布 → 删除。 | # | 接口 | 方法 / 格式 | 用途 | | --- | --- | --- | --- | | 0 | `/hes-gateway/manage/selectCitesList?countryId=2&type=1&lang=ZH_CN` | GET | 查询美国的省/州 | | 28 | `/hes-gateway/manage/updateOrSaveIotTouTemplate` | POST JSON | 新建,返回 `result: 4576`(模版 ID) | | 29/34/37 | `/hes-gateway/manage/selectIotTouTemplateList` | POST form | 列表 | | 30/32 | `/hes-gateway/manage/getIotTouTemplateDetailById` | POST form `id=4576&lang=ZH_CN` | 详情(两次返回完全相同) | | 33 | `/hes-gateway/manage/setStatusIotTouTemplate` | POST form `templateId=4576&status=2&lang=ZH_CN` | **发布** | | 36 | `/hes-gateway/manage/setStatusIotTouTemplate` | POST form `templateId=4576&status=1&lang=ZH_CN` | **删除** | **未覆盖**:编辑后保存(更新)。 ## 2. 状态接口 `setStatusIotTouTemplate` - 发布和删除共用一个接口,只是 `status` 不同:`2` 发布,`1` 删除。响应 `{"code":200,"result":null}`。 - 删除是软删除:之后列表总数从 1126 降到 1125,模版不再出现在列表中。 - `status` 取值:`0` 未发布、`1` 已删除、`2` 已发布。没有取消发布的操作(目前只能改数据库)。 - 发布后 `updateTime` 不变(列表中仍为 `03:02:33`)。 ## 3. 新建:网页提交的内容与云端存储的差异 网页提交的请求体与 `fwhTestTouTemplateDTO.go` / `tou-template.md` 的约定有出入,云端会做规范化: | 字段 | 网页提交 | 详情读回 | 说明 | | --- | --- | --- | --- | | 未设置的可选数值(功率、SOC 等) | `""` | `null` | 空串可接受;我们的 DTO 用省略,两种都应可行(省略方式待验证) | | `solarCutoff` | `""` | `0` | 空串被存为 0 | | `name`(时段名) | `""` | `"mid-peak"` | 云端按 `waveType` 自动生成 | | `powerOffApower` | `""` | `""` | 原样 | | `template.mookRunCount` | `"0"`(字符串) | `0` | | | `template.priority` / `env` | `""` | `null` | | | `template.sourceType` | 未提交 | `0` | 默认系统模版 | | `dayName` | `All day` / `Workday` / `Holidays` | `Every day` / `Weekdays` / `Weekends,Holidays` | **云端按 `dayType` 改写**,提交什么不重要 | | `ccociateSn` | 数字 `2`、`4` | 字符串 `"2"`、`"4"` | 不要求从 `"0"` 连续递增,只要求同组相同 | | 策略顺序 | JanToJun, JulToSep×2, OctToDec×2 | JanToJun, OctToDec×2, JulToSep×2 | 读回顺序与提交不同,按 `id` 也不是提交顺序 | ## 4. 详情中云端生成或只读的字段 写入 DTO 没有、由云端生成的字段: - 模版:`id`、`templateId`(等于 `id`)、`gatewayId`、`templateFromType`、`eletricCompanyId`(本例 10100,按电力公司生成或匹配)、`sdcpCompanyFlag`、`status`、`countryZh/En`、`provinceZh/En`、`workMode`(本例 1)、`updateTime`、`displayFlag`、`templateType`、`ptoDate`、`nbtType`、`classification`、`remark`、`tariffName`、`templateName`、`installerTpl`、`solarChargeMin`。 - 策略:`id`、`templateId`、`fromType`。 - 时段:`id`、`strategyId`、`useModeFlag`(本例 0)、`dispatchId`(本例 6,优先级为 `1,3,2`/`1,3,2`,**云端似乎按优先级匹配了自己的调度模式表**)、`dispatch`、`buyRate`、`sellRate`。 - 顶层另有 `bbDefaultVo`(本例 `null`)。 ## 5. 待补充验证 | 编号 | 验证内容 | 影响 | | --- | --- | --- | | V-01 | 编辑后保存的请求体:网页是否回传策略/时段 `id`,是否回传第 4 节中的只读字段 | 更新语义、保持原值 | | V-02 | 更新后策略/时段 `id` 是否变化(整体删除重建还是按 `id` 更新) | 对比对齐、操作记录 | | V-03 | 对已有 `remark`、`displayFlag`、`tariffName` 等非空的模版,更新时不传这些字段,是否会被清空 | 保持原值 | | V-04 | `dispatchId` 的完整取值表。已知:`6`=D(`1,3,2`/`1,3,2`),`3`=E/G(`1,2,3`/`1,2,0`),`9`=Zero Import(`9,9,9`),见 `service/test/tou/main.go`;抓包中网页新建时未提交 `dispatchId`,读回为 `6`,说明云端按优先级自动匹配;完整取值表和未匹配时的取值待确认 | 调度模式定义表 | | V-05 | 对已发布模版执行更新后,`status` 是否保持 2 | 编辑流程 | | V-06 | 可选数值字段“省略”与“传空串”在云端是否等价 | 写入格式 |