Jelajahi Sumber

feat:增加一个TOU模版提交的测试脚本

Jerry Liang 2 bulan lalu
induk
melakukan
6011168e3c

+ 390 - 0
service/test/tou/main.go

@@ -0,0 +1,390 @@
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"io"
+	"net/http"
+	"os"
+	"time"
+)
+
+// 运行方式
+// export FWH_TOKEN="你的logintoken值"
+// cd service/test/tou
+// go run main.go
+
+// ===== 配置 =====
+const (
+	baseURL = "https://test.franklinwh.com"
+	lang    = "ZH_CN"
+)
+
+// ===== 数据结构 =====
+
+type APIResponse struct {
+	Code    int             `json:"code"`
+	Message string          `json:"message"`
+	Result  json.RawMessage `json:"result"`
+	Success bool            `json:"success"`
+}
+
+type Province struct {
+	ID     int    `json:"id"`
+	NameEn string `json:"nameEn"`
+	NameZh string `json:"nameZh"`
+}
+
+type TemplateData struct {
+	Template     TemplateInfo     `json:"template"`
+	StrategyList []StrategyInfo   `json:"strategyList"`
+}
+
+type TemplateInfo struct {
+	ID                 int    `json:"id"`
+	ElectricCompany    string `json:"electricCompany"`
+	EleCompanyFullName string `json:"eleCompanyFullName"`
+	DerSchdule         string `json:"derSchdule"`
+	GridType           string `json:"gridType"`
+	Name               string `json:"name"`
+	ElectricityType    int    `json:"electricityType"`
+	CountryId          int    `json:"countryId"`
+	ProvinceId         int    `json:"provinceId"`
+	ProvinceEn         string `json:"provinceEn"`
+	Env                int    `json:"env"`
+	MookRunCount       int    `json:"mookRunCount"`
+	Priority           int    `json:"priority"`
+}
+
+type StrategyInfo struct {
+	SeasonName             string       `json:"seasonName"`
+	Month                  string       `json:"month"`
+	DayName                string       `json:"dayName"`
+	DayType                int          `json:"dayType"`
+	CcociateSn             string       `json:"ccociateSn"`
+	CcociateType           int          `json:"ccociateType"`
+	EleticRatePeak         *float64     `json:"eleticRatePeak"`
+	EleticRateShoulder     *float64     `json:"eleticRateShoulder"`
+	EleticRateValley       *float64     `json:"eleticRateValley"`
+	EleticRateSharp        *float64     `json:"eleticRateSharp"`
+	EleticRateSuperOffPeak *float64     `json:"eleticRateSuperOffPeak"`
+	EleticRateGridFee      *float64     `json:"eleticRateGridFee"`
+	EleticSellPeak         *float64     `json:"eleticSellPeak"`
+	EleticSellShoulder     *float64     `json:"eleticSellShoulder"`
+	EleticSellValley       *float64     `json:"eleticSellValley"`
+	EleticSellSharp        *float64     `json:"eleticSellSharp"`
+	EleticSellSuperOffPeak *float64     `json:"eleticSellSuperOffPeak"`
+	DetailVoList           []DetailInfo `json:"detailVoList"`
+}
+
+type DetailInfo struct {
+	StartHourTime    string   `json:"startHourTime"`
+	EndHourTime      string   `json:"endHourTime"`
+	WaveType         int      `json:"waveType"`
+	Name             string   `json:"name"`
+	BriefDescribe    string   `json:"briefDescribe"`
+	SolarPriority    string   `json:"solarPriority"`
+	GridDischargeMax *float64 `json:"gridDischargeMax"`
+	GridChargeMax    *float64 `json:"gridChargeMax"`
+	ChargePower      *float64 `json:"chargePower"`
+	DischargePower   *float64 `json:"dischargePower"`
+	ChargeMax        *float64 `json:"chargeMax"`
+	DischargeMax     *float64 `json:"dischargeMax"`
+	GcaoMax          *float64 `json:"gcaoMax"`
+	LoadPriority     string   `json:"loadPriority"`
+	GridFeedMax      *float64 `json:"gridFeedMax"`
+	GridMax          *float64 `json:"gridMax"`
+	MinDischargeSoc  *int     `json:"minDischargeSoc"`
+	MaxChargeSoc     *int     `json:"maxChargeSoc"`
+	HeatEnable       *int     `json:"heatEnable"`
+	PowerOffApower   string   `json:"powerOffApower"`
+	RampTime         *int     `json:"rampTime"`
+	OffGrid          *int     `json:"offGrid"`
+	SolarCutoff      *int     `json:"solarCutoff"`
+	UseModeFlag      int      `json:"useModeFlag"`
+	DispatchId       int      `json:"dispatchId"`
+	BuyRate          *float64 `json:"buyRate"`
+	SellRate         *float64 `json:"sellRate"`
+}
+
+// 创建模版的请求体
+type CreateTemplatePayload struct {
+	Template     CreateTemplateInfo `json:"template"`
+	StrategyList []StrategyInfo     `json:"strategyList"`
+	Lang         string             `json:"lang"`
+}
+
+type CreateTemplateInfo struct {
+	CountryId          int    `json:"countryId"`
+	ProvinceId         int    `json:"provinceId"`
+	DerSchdule         string `json:"derSchdule"`
+	EleCompanyFullName string `json:"eleCompanyFullName"`
+	ElectricCompany    string `json:"electricCompany"`
+	GridType           string `json:"gridType"`
+	ElectricityType    int    `json:"electricityType"`
+	Name               string `json:"name"`
+	MookRunCount       string `json:"mookRunCount"`
+	Priority           string `json:"priority"`
+	Env                string `json:"env"`
+}
+
+// ===== HAR 数据:三个模版的策略数据 =====
+
+func getTemplateData() []TemplateData {
+	// 模版 4477 - ZEROHERO (GloBird Energy, Queensland)
+	int90 := 90
+	float5 := 5.0
+	float0_1 := 0.1
+	float10 := 10.0
+	float0 := 0.0
+	int1 := 1
+	int0 := 0
+
+	template4477 := TemplateData{
+		Template: TemplateInfo{
+			ID: 4477, ElectricCompany: "GloBird Energy", EleCompanyFullName: "GloBird Energy",
+			DerSchdule: "ZEROHERO", GridType: "ZEROHERO", Name: "ZEROHERO",
+			ElectricityType: 1, CountryId: 3, ProvinceId: 88, ProvinceEn: "Queensland",
+			Env: 0, MookRunCount: 0, Priority: 0,
+		},
+		StrategyList: []StrategyInfo{
+			{
+				SeasonName: "All months", Month: "1,2,3,4,5,6,7,8,9,10,11,12",
+				DayName: "Every day", DayType: 3, CcociateSn: "", CcociateType: 1,
+				DetailVoList: []DetailInfo{
+					{StartHourTime: "00:00", EndHourTime: "11:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "11:00", EndHourTime: "14:00", WaveType: 0, Name: "off-peak", BriefDescribe: "aPower charger from solar", SolarPriority: "1,2,3", GridChargeMax: &float5, LoadPriority: "1,2,0", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 3, PowerOffApower: ""},
+					{StartHourTime: "14:00", EndHourTime: "16:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", MinDischargeSoc: &int90, SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "16:00", EndHourTime: "18:00", WaveType: 2, Name: "on-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", MinDischargeSoc: &int90, SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "18:00", EndHourTime: "21:00", WaveType: 2, Name: "on-peak", BriefDescribe: "Zero Import", SolarPriority: "9,9,9", GridDischargeMax: &float0_1, GridFeedMax: &float0_1, DischargePower: &float10, GridMax: &float0, GcaoMax: &float0, LoadPriority: "9,9,9", HeatEnable: &int1, SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 9, PowerOffApower: ""},
+					{StartHourTime: "21:00", EndHourTime: "23:00", WaveType: 2, Name: "on-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "23:00", EndHourTime: "24:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+				},
+			},
+		},
+	}
+
+	// 模版 4478 - FOUR4FREE (GloBird Energy, Queensland)
+	template4478 := TemplateData{
+		Template: TemplateInfo{
+			ID: 4478, ElectricCompany: "GloBird Energy", EleCompanyFullName: "GloBird Energy",
+			DerSchdule: "FOUR4FREE", GridType: "FOUR4FREE", Name: "FOUR4FREE",
+			ElectricityType: 1, CountryId: 3, ProvinceId: 88, ProvinceEn: "Queensland",
+			Env: 0, MookRunCount: 0, Priority: 0,
+		},
+		StrategyList: []StrategyInfo{
+			{
+				SeasonName: "All months", Month: "1,2,3,4,5,6,7,8,9,10,11,12",
+				DayName: "Every day", DayType: 3, CcociateSn: "", CcociateType: 1,
+				DetailVoList: []DetailInfo{
+					{StartHourTime: "00:00", EndHourTime: "10:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "10:00", EndHourTime: "14:00", WaveType: 0, Name: "off-peak", BriefDescribe: "aPower charge from solar", SolarPriority: "1,2,3", GridChargeMax: &float5, LoadPriority: "1,2,0", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 3, PowerOffApower: ""},
+					{StartHourTime: "14:00", EndHourTime: "16:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", MinDischargeSoc: &int90, SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "16:00", EndHourTime: "23:00", WaveType: 2, Name: "on-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "23:00", EndHourTime: "24:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+				},
+			},
+		},
+	}
+
+	// 模版 4479 - Basic 3 Free (OVO Energy, Queensland)
+	template4479 := TemplateData{
+		Template: TemplateInfo{
+			ID: 4479, ElectricCompany: "OVO Energy", EleCompanyFullName: "OVO Energy",
+			DerSchdule: "Basic 3 Free", GridType: "Basic 3 Free", Name: "Basic 3 Free",
+			ElectricityType: 1, CountryId: 3, ProvinceId: 88, ProvinceEn: "Queensland",
+			Env: 0, MookRunCount: 0, Priority: 0,
+		},
+		StrategyList: []StrategyInfo{
+			{
+				SeasonName: "All months", Month: "1,2,3,4,5,6,7,8,9,10,11,12",
+				DayName: "Every day", DayType: 3, CcociateSn: "", CcociateType: 1,
+				DetailVoList: []DetailInfo{
+					{StartHourTime: "00:00", EndHourTime: "11:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "11:00", EndHourTime: "14:00", WaveType: 0, Name: "off-peak", BriefDescribe: "aPower charge from solar", SolarPriority: "1,2,3", GridChargeMax: &float5, LoadPriority: "1,2,0", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 3, PowerOffApower: ""},
+					{StartHourTime: "14:00", EndHourTime: "16:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "Self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", MinDischargeSoc: &int90, SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "16:00", EndHourTime: "23:00", WaveType: 2, Name: "on-peak", BriefDescribe: "self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+					{StartHourTime: "23:00", EndHourTime: "24:00", WaveType: 1, Name: "mid-peak", BriefDescribe: "self-consumption", SolarPriority: "1,3,2", LoadPriority: "1,3,2", SolarCutoff: &int0, UseModeFlag: 0, DispatchId: 6, PowerOffApower: ""},
+				},
+			},
+		},
+	}
+
+	return []TemplateData{template4477, template4478, template4479}
+}
+
+// ===== HAR 数据:澳洲所有州 =====
+
+func getAustraliaProvinces() []Province {
+	return []Province{
+		{ID: 93, NameEn: "Australian Capital Territory", NameZh: "澳大利亚首都特区"},
+		{ID: 95, NameEn: "Jervis Bay Territory", NameZh: "杰维斯湾领地"},
+		{ID: 87, NameEn: "New South Wales", NameZh: "新南威尔士州"},
+		{ID: 94, NameEn: "Northern Territory", NameZh: "北领地"},
+		{ID: 88, NameEn: "Queensland", NameZh: "昆士兰州"},
+		{ID: 89, NameEn: "South Australia", NameZh: "南澳大利亚州"},
+		{ID: 90, NameEn: "Tasmania", NameZh: "塔斯马尼亚州"},
+		{ID: 91, NameEn: "Victoria", NameZh: "維多利亞省"},
+		{ID: 92, NameEn: "Western Australia", NameZh: "西澳大利亚州"},
+	}
+}
+
+// ===== HTTP 客户端 =====
+
+type Client struct {
+	httpClient *http.Client
+	token      string
+}
+
+func NewClient(token string) *Client {
+	return &Client{
+		httpClient: &http.Client{Timeout: 30 * time.Second},
+		token:      token,
+	}
+}
+
+// POST JSON 请求
+func (c *Client) PostJSON(path string, payload interface{}) ([]byte, error) {
+	reqURL := baseURL + path
+	jsonData, err := json.Marshal(payload)
+	if err != nil {
+		return nil, fmt.Errorf("序列化请求体失败: %w", err)
+	}
+
+	req, err := http.NewRequest("POST", reqURL, bytes.NewBuffer(jsonData))
+	if err != nil {
+		return nil, fmt.Errorf("创建请求失败: %w", err)
+	}
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("Logintoken", c.token)
+	req.Header.Set("Lang", lang)
+	req.Header.Set("Accept", "application/json, text/plain, */*")
+
+	resp, err := c.httpClient.Do(req)
+	if err != nil {
+		return nil, fmt.Errorf("请求失败: %w", err)
+	}
+	defer resp.Body.Close()
+
+	body, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return nil, fmt.Errorf("读取响应失败: %w", err)
+	}
+
+	if resp.StatusCode != http.StatusOK {
+		return nil, fmt.Errorf("HTTP状态码: %d, 响应: %s", resp.StatusCode, string(body))
+	}
+
+	return body, nil
+}
+
+// ===== 业务逻辑 =====
+
+// 创建模版
+func createTemplate(client *Client, payload *CreateTemplatePayload) (int, error) {
+	body, err := client.PostJSON("/hes-gateway/manage/updateOrSaveIotTouTemplate", payload)
+	if err != nil {
+		return 0, err
+	}
+
+	var resp APIResponse
+	if err := json.Unmarshal(body, &resp); err != nil {
+		return 0, fmt.Errorf("解析创建模版响应失败: %w", err)
+	}
+
+	if resp.Code != 200 {
+		return 0, fmt.Errorf("创建模版失败: %s", resp.Message)
+	}
+
+	var newID int
+	if err := json.Unmarshal(resp.Result, &newID); err != nil {
+		return 0, fmt.Errorf("解析新模版ID失败: %w", err)
+	}
+
+	return newID, nil
+}
+
+// 构建创建模版的请求体
+func buildCreatePayload(tmplData *TemplateData, province Province) *CreateTemplatePayload {
+	return &CreateTemplatePayload{
+		Template: CreateTemplateInfo{
+			CountryId:          tmplData.Template.CountryId,
+			ProvinceId:         province.ID,
+			DerSchdule:         tmplData.Template.DerSchdule,
+			EleCompanyFullName: tmplData.Template.EleCompanyFullName,
+			ElectricCompany:    tmplData.Template.ElectricCompany,
+			GridType:           tmplData.Template.GridType,
+			ElectricityType:    tmplData.Template.ElectricityType,
+			Name:               tmplData.Template.Name,
+			MookRunCount:       fmt.Sprintf("%d", tmplData.Template.MookRunCount),
+			Priority:           fmt.Sprintf("%d", tmplData.Template.Priority),
+			Env:                fmt.Sprintf("%d", tmplData.Template.Env),
+		},
+		StrategyList: tmplData.StrategyList,
+		Lang:         lang,
+	}
+}
+
+func main() {
+	// 从环境变量获取 token
+	token := os.Getenv("FWH_TOKEN")
+	if token == "" {
+		fmt.Println("请设置 FWH_TOKEN 环境变量")
+		fmt.Println("例如: export FWH_TOKEN=eyJhbGciOiJIUzI1NiIs...")
+		os.Exit(1)
+	}
+
+	client := NewClient(token)
+
+	// 获取硬编码的模版数据和州列表
+	templates := getTemplateData()
+	allProvinces := getAustraliaProvinces()
+
+	// 收集已有模版对应的州ID(Queensland, id=88)
+	existingProvinceIDs := make(map[int]bool)
+	for _, tmpl := range templates {
+		existingProvinceIDs[tmpl.Template.ProvinceId] = true
+	}
+
+	// 过滤出需要创建的州
+	var targetProvinces []Province
+	for _, p := range allProvinces {
+		if !existingProvinceIDs[p.ID] {
+			targetProvinces = append(targetProvinces, p)
+		}
+	}
+
+	fmt.Printf("模版数量: %d, 目标州数量: %d (已排除: Queensland)\n", len(templates), len(targetProvinces))
+	fmt.Printf("预计创建模版总数: %d\n\n", len(templates)*len(targetProvinces))
+
+	// 为每个目标州创建所有模版
+	successCount := 0
+	failCount := 0
+
+	for _, province := range targetProvinces {
+		fmt.Printf("--- 州: %s (%s) ---\n", province.NameEn, province.NameZh)
+
+		for _, tmplData := range templates {
+			payload := buildCreatePayload(&tmplData, province)
+
+			newID, err := createTemplate(client, payload)
+			if err != nil {
+				fmt.Printf("  ❌ [%s] 创建失败: %v\n", tmplData.Template.Name, err)
+				failCount++
+				continue
+			}
+
+			fmt.Printf("  ✅ [%s] 创建成功, 新ID: %d\n", tmplData.Template.Name, newID)
+			successCount++
+
+			// 请求间隔,避免过快
+			time.Sleep(500 * time.Millisecond)
+		}
+		fmt.Println()
+	}
+
+	// 输出统计
+	fmt.Printf("===== 完成 =====\n")
+	fmt.Printf("成功: %d, 失败: %d, 总计: %d\n", successCount, failCount, successCount+failCount)
+}

+ 1056 - 0
service/test/tou/模版测试-关键请求.json

@@ -0,0 +1,1056 @@
+[
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/selectIotTouTemplateList",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 119 (while parsing 'sourceType=&countryId=&provinceId=&status=&startUpdateTime=&endUpdateTime=&search=4477&pageSize=10&pageNum=1&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "查询成功!",
+      "result": [
+        {
+          "id": 4477,
+          "electricCompany": "GloBird Energy",
+          "eleCompanyFullName": "GloBird Energy",
+          "derSchdule": "ZEROHERO",
+          "gridType": "ZEROHERO",
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryName": "澳大利亚",
+          "provinceName": "昆士兰州",
+          "provinceId": 88,
+          "updateTime": "2026-07-24 02:23:00",
+          "electricityType": 1
+        }
+      ],
+      "total": 1,
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/getIotTouTemplateDetailById",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 18 (while parsing 'id=4477&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "操作成功!",
+      "result": {
+        "template": {
+          "id": 4477,
+          "gatewayId": null,
+          "templateId": 4477,
+          "templateFromType": 0,
+          "electricCompany": "GloBird Energy",
+          "eleCompanyFullName": "GloBird Energy",
+          "eletricCompanyId": 10048,
+          "sdcpCompanyFlag": null,
+          "derSchdule": "ZEROHERO",
+          "gridType": "ZEROHERO",
+          "name": "ZEROHERO",
+          "electricityType": 1,
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryZh": "澳大利亚",
+          "countryEn": "Australia",
+          "provinceEn": "Queensland",
+          "provinceId": 88,
+          "provinceZh": "昆士兰州",
+          "env": 0,
+          "mookRunCount": 0,
+          "priority": 0,
+          "solarChargeMin": null,
+          "workMode": 1,
+          "updateTime": "2026-07-24 02:23:00",
+          "displayFlag": 1,
+          "templateType": null,
+          "ptoDate": null,
+          "nbtType": null,
+          "classification": null,
+          "remark": null,
+          "tariffName": null,
+          "templateName": null
+        },
+        "strategyList": [
+          {
+            "id": 129171,
+            "seasonName": "All months",
+            "month": "1,2,3,4,5,6,7,8,9,10,11,12",
+            "templateId": 4477,
+            "fromType": null,
+            "dayName": "Every day",
+            "dayType": 3,
+            "ccociateSn": "",
+            "ccociateType": 1,
+            "eleticRatePeak": null,
+            "eleticRateShoulder": null,
+            "eleticRateValley": null,
+            "eleticRateSharp": null,
+            "eleticRateSuperOffPeak": null,
+            "eleticRateGridFee": null,
+            "eleticSellPeak": null,
+            "eleticSellShoulder": null,
+            "eleticSellValley": null,
+            "eleticSellSharp": null,
+            "eleticSellSuperOffPeak": null,
+            "detailVoList": [
+              {
+                "id": 121677,
+                "name": "mid-peak",
+                "strategyId": 129171,
+                "startHourTime": "00:00",
+                "endHourTime": "11:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121678,
+                "name": "off-peak",
+                "strategyId": 129171,
+                "startHourTime": "11:00",
+                "endHourTime": "14:00",
+                "waveType": 0,
+                "briefDescribe": "aPower charger from solar",
+                "solarPriority": "1,2,3",
+                "gridDischargeMax": null,
+                "gridChargeMax": 5,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,2,0",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 3,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121679,
+                "name": "mid-peak",
+                "strategyId": 129171,
+                "startHourTime": "14:00",
+                "endHourTime": "16:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": 90,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121680,
+                "name": "on-peak",
+                "strategyId": 129171,
+                "startHourTime": "16:00",
+                "endHourTime": "18:00",
+                "waveType": 2,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": 90,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121681,
+                "name": "on-peak",
+                "strategyId": 129171,
+                "startHourTime": "18:00",
+                "endHourTime": "21:00",
+                "waveType": 2,
+                "briefDescribe": "Zero Import",
+                "solarPriority": "9,9,9",
+                "gridDischargeMax": 0.1,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": 0.1,
+                "dischargePower": 10,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": 0,
+                "loadPriority": "9,9,9",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": 1,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": 0,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 9,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121682,
+                "name": "on-peak",
+                "strategyId": 129171,
+                "startHourTime": "21:00",
+                "endHourTime": "23:00",
+                "waveType": 2,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121683,
+                "name": "mid-peak",
+                "strategyId": 129171,
+                "startHourTime": "23:00",
+                "endHourTime": "24:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              }
+            ]
+          }
+        ],
+        "bbDefaultVo": null
+      },
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/selectCitesList?countryId=3&type=1&lang=ZH_CN",
+    "method": "GET",
+    "requestBody": null,
+    "responseBody": {
+      "code": 200,
+      "message": "查询成功!",
+      "result": {
+        "countryList": null,
+        "provinceList": [
+          {
+            "id": 93,
+            "nameEn": "Australian Capital Territory",
+            "nameZh": "澳大利亚首都特区",
+            "latitude": "-35.46388240972573",
+            "longitude": "148.96975680959932",
+            "cityList": null
+          },
+          {
+            "id": 95,
+            "nameEn": "Jervis Bay Territory",
+            "nameZh": "杰维斯湾领地",
+            "latitude": "-35.148991343783464",
+            "longitude": "150.68892244742435",
+            "cityList": null
+          },
+          {
+            "id": 87,
+            "nameEn": "New South Wales",
+            "nameZh": "新南威尔士州",
+            "latitude": "-32.7417069",
+            "longitude": "145.5621282",
+            "cityList": null
+          },
+          {
+            "id": 94,
+            "nameEn": "Northern Territory",
+            "nameZh": "北领地",
+            "latitude": "-19.69640594350155",
+            "longitude": "133.7233493643486",
+            "cityList": null
+          },
+          {
+            "id": 88,
+            "nameEn": "Queensland",
+            "nameZh": "昆士兰州",
+            "latitude": "-22.9061136261844",
+            "longitude": "144.22590038580125",
+            "cityList": null
+          },
+          {
+            "id": 89,
+            "nameEn": "South Australia",
+            "nameZh": "南澳大利亚州",
+            "latitude": "-29.76936636605166",
+            "longitude": "134.98877888786274",
+            "cityList": null
+          },
+          {
+            "id": 90,
+            "nameEn": "Tasmania",
+            "nameZh": "塔斯马尼亚州",
+            "latitude": "-41.94503328505248",
+            "longitude": "146.93122243891824",
+            "cityList": null
+          },
+          {
+            "id": 91,
+            "nameEn": "Victoria",
+            "nameZh": "維多利亞省",
+            "latitude": "-37.0297202710517",
+            "longitude": "144.00165465307117",
+            "cityList": null
+          },
+          {
+            "id": 92,
+            "nameEn": "Western Australia",
+            "nameZh": "西澳大利亚州",
+            "latitude": "-25.305560688793545",
+            "longitude": "122.39744754662014",
+            "cityList": null
+          }
+        ],
+        "cityList": null
+      },
+      "total": 1,
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/updateOrSaveIotTouTemplate",
+    "method": "POST",
+    "requestBody": {
+      "template": {
+        "countryId": 3,
+        "provinceId": 88,
+        "derSchdule": "A",
+        "eleCompanyFullName": "B",
+        "electricCompany": "B",
+        "gridType": "C",
+        "electricityType": 1,
+        "name": "S",
+        "mookRunCount": "0",
+        "priority": "",
+        "env": ""
+      },
+      "strategyList": [
+        {
+          "ccociateType": 1,
+          "ccociateSn": "",
+          "detailVoList": [
+            {
+              "startHourTime": "00:00",
+              "endHourTime": "24:00",
+              "waveType": 1,
+              "name": "",
+              "briefDescribe": "",
+              "solarPriority": "",
+              "gridDischargeMax": "",
+              "gridChargeMax": "",
+              "chargePower": "",
+              "dischargePower": "",
+              "chargeMax": "",
+              "dischargeMax": "",
+              "gcaoMax": "",
+              "loadPriority": "",
+              "gridFeedMax": "",
+              "gridMax": "",
+              "minDischargeSoc": "",
+              "maxChargeSoc": "",
+              "heatEnable": "",
+              "powerOffApower": "",
+              "rampTime": "",
+              "offGrid": "",
+              "solarCutoff": ""
+            }
+          ],
+          "seasonName": "W",
+          "month": "1,2,3,4,5,6,7,8,9,10,11,12",
+          "dayName": "Everyday",
+          "dayType": 3
+        }
+      ],
+      "lang": "ZH_CN"
+    },
+    "responseBody": {
+      "code": 200,
+      "message": "操作成功!",
+      "result": 4517,
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/selectIotTouTemplateList",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 119 (while parsing 'sourceType=&countryId=&provinceId=&status=&startUpdateTime=&endUpdateTime=&search=4477&pageSize=10&pageNum=1&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "查询成功!",
+      "result": [
+        {
+          "id": 4477,
+          "electricCompany": "GloBird Energy",
+          "eleCompanyFullName": "GloBird Energy",
+          "derSchdule": "ZEROHERO",
+          "gridType": "ZEROHERO",
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryName": "澳大利亚",
+          "provinceName": "昆士兰州",
+          "provinceId": 88,
+          "updateTime": "2026-07-24 02:23:00",
+          "electricityType": 1
+        }
+      ],
+      "total": 1,
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/announcement/displayList?lang=ZH_CN",
+    "method": "GET",
+    "requestBody": null,
+    "responseBody": {
+      "code": 200,
+      "message": "操作成功!",
+      "result": [],
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/selectIotTouTemplateList",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 119 (while parsing 'sourceType=&countryId=&provinceId=&status=&startUpdateTime=&endUpdateTime=&search=4478&pageSize=10&pageNum=1&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "查询成功!",
+      "result": [
+        {
+          "id": 4478,
+          "electricCompany": "GloBird Energy",
+          "eleCompanyFullName": "GloBird Energy",
+          "derSchdule": "FOUR4FREE",
+          "gridType": "FOUR4FREE",
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryName": "澳大利亚",
+          "provinceName": "昆士兰州",
+          "provinceId": 88,
+          "updateTime": "2026-06-22 08:14:41",
+          "electricityType": 1
+        }
+      ],
+      "total": 1,
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/getIotTouTemplateDetailById",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 18 (while parsing 'id=4478&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "操作成功!",
+      "result": {
+        "template": {
+          "id": 4478,
+          "gatewayId": null,
+          "templateId": 4478,
+          "templateFromType": 0,
+          "electricCompany": "GloBird Energy",
+          "eleCompanyFullName": "GloBird Energy",
+          "eletricCompanyId": 10048,
+          "sdcpCompanyFlag": null,
+          "derSchdule": "FOUR4FREE",
+          "gridType": "FOUR4FREE",
+          "name": "FOUR4FREE",
+          "electricityType": 1,
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryZh": "澳大利亚",
+          "countryEn": "Australia",
+          "provinceEn": "Queensland",
+          "provinceId": 88,
+          "provinceZh": "昆士兰州",
+          "env": 0,
+          "mookRunCount": 0,
+          "priority": 0,
+          "solarChargeMin": null,
+          "workMode": 1,
+          "updateTime": "2026-06-22 08:14:41",
+          "displayFlag": 1,
+          "templateType": null,
+          "ptoDate": null,
+          "nbtType": null,
+          "classification": null,
+          "remark": null,
+          "tariffName": null,
+          "templateName": null
+        },
+        "strategyList": [
+          {
+            "id": 129138,
+            "seasonName": "All months",
+            "month": "1,2,3,4,5,6,7,8,9,10,11,12",
+            "templateId": 4478,
+            "fromType": null,
+            "dayName": "Every day",
+            "dayType": 3,
+            "ccociateSn": "",
+            "ccociateType": 1,
+            "eleticRatePeak": null,
+            "eleticRateShoulder": null,
+            "eleticRateValley": null,
+            "eleticRateSharp": null,
+            "eleticRateSuperOffPeak": null,
+            "eleticRateGridFee": null,
+            "eleticSellPeak": null,
+            "eleticSellShoulder": null,
+            "eleticSellValley": null,
+            "eleticSellSharp": null,
+            "eleticSellSuperOffPeak": null,
+            "detailVoList": [
+              {
+                "id": 121535,
+                "name": "mid-peak",
+                "strategyId": 129138,
+                "startHourTime": "00:00",
+                "endHourTime": "10:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121536,
+                "name": "off-peak",
+                "strategyId": 129138,
+                "startHourTime": "10:00",
+                "endHourTime": "14:00",
+                "waveType": 0,
+                "briefDescribe": "aPower charge from solar",
+                "solarPriority": "1,2,3",
+                "gridDischargeMax": null,
+                "gridChargeMax": 5,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,2,0",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 3,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121537,
+                "name": "mid-peak",
+                "strategyId": 129138,
+                "startHourTime": "14:00",
+                "endHourTime": "16:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": 90,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121538,
+                "name": "on-peak",
+                "strategyId": 129138,
+                "startHourTime": "16:00",
+                "endHourTime": "23:00",
+                "waveType": 2,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121539,
+                "name": "mid-peak",
+                "strategyId": 129138,
+                "startHourTime": "23:00",
+                "endHourTime": "24:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              }
+            ]
+          }
+        ],
+        "bbDefaultVo": null
+      },
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/selectIotTouTemplateList",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 119 (while parsing 'sourceType=&countryId=&provinceId=&status=&startUpdateTime=&endUpdateTime=&search=4479&pageSize=10&pageNum=1&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "查询成功!",
+      "result": [
+        {
+          "id": 4479,
+          "electricCompany": "OVO Energy",
+          "eleCompanyFullName": "OVO Energy",
+          "derSchdule": "Basic 3 Free",
+          "gridType": "Basic 3 Free",
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryName": "澳大利亚",
+          "provinceName": "昆士兰州",
+          "provinceId": 88,
+          "updateTime": "2026-06-22 08:14:03",
+          "electricityType": 1
+        }
+      ],
+      "total": 1,
+      "success": true
+    },
+    "status": 200
+  },
+  {
+    "url": "https://test.franklinwh.com/hes-gateway/manage/getIotTouTemplateDetailById",
+    "method": "POST",
+    "requestBody": "Invalid numeric literal at EOF at line 1, column 18 (while parsing 'id=4479&lang=ZH_CN')",
+    "responseBody": {
+      "code": 200,
+      "message": "操作成功!",
+      "result": {
+        "template": {
+          "id": 4479,
+          "gatewayId": null,
+          "templateId": 4479,
+          "templateFromType": 0,
+          "electricCompany": "OVO Energy",
+          "eleCompanyFullName": "OVO Energy",
+          "eletricCompanyId": 10049,
+          "sdcpCompanyFlag": null,
+          "derSchdule": "Basic 3 Free",
+          "gridType": "Basic 3 Free",
+          "name": "Basic 3 Free",
+          "electricityType": 1,
+          "status": 2,
+          "sourceType": 0,
+          "countryId": 3,
+          "countryZh": "澳大利亚",
+          "countryEn": "Australia",
+          "provinceEn": "Queensland",
+          "provinceId": 88,
+          "provinceZh": "昆士兰州",
+          "env": 0,
+          "mookRunCount": 0,
+          "priority": 0,
+          "solarChargeMin": null,
+          "workMode": 1,
+          "updateTime": "2026-06-22 08:14:03",
+          "displayFlag": 1,
+          "templateType": null,
+          "ptoDate": null,
+          "nbtType": null,
+          "classification": null,
+          "remark": null,
+          "tariffName": null,
+          "templateName": null
+        },
+        "strategyList": [
+          {
+            "id": 129137,
+            "seasonName": "All months",
+            "month": "1,2,3,4,5,6,7,8,9,10,11,12",
+            "templateId": 4479,
+            "fromType": null,
+            "dayName": "Every day",
+            "dayType": 3,
+            "ccociateSn": "",
+            "ccociateType": 1,
+            "eleticRatePeak": null,
+            "eleticRateShoulder": null,
+            "eleticRateValley": null,
+            "eleticRateSharp": null,
+            "eleticRateSuperOffPeak": null,
+            "eleticRateGridFee": null,
+            "eleticSellPeak": null,
+            "eleticSellShoulder": null,
+            "eleticSellValley": null,
+            "eleticSellSharp": null,
+            "eleticSellSuperOffPeak": null,
+            "detailVoList": [
+              {
+                "id": 121530,
+                "name": "mid-peak",
+                "strategyId": 129137,
+                "startHourTime": "00:00",
+                "endHourTime": "11:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121531,
+                "name": "off-peak",
+                "strategyId": 129137,
+                "startHourTime": "11:00",
+                "endHourTime": "14:00",
+                "waveType": 0,
+                "briefDescribe": "aPower charge from solar",
+                "solarPriority": "1,2,3",
+                "gridDischargeMax": null,
+                "gridChargeMax": 5,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,2,0",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 3,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121532,
+                "name": "mid-peak",
+                "strategyId": 129137,
+                "startHourTime": "14:00",
+                "endHourTime": "16:00",
+                "waveType": 1,
+                "briefDescribe": "Self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": 90,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121533,
+                "name": "on-peak",
+                "strategyId": 129137,
+                "startHourTime": "16:00",
+                "endHourTime": "23:00",
+                "waveType": 2,
+                "briefDescribe": "self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              },
+              {
+                "id": 121534,
+                "name": "mid-peak",
+                "strategyId": 129137,
+                "startHourTime": "23:00",
+                "endHourTime": "24:00",
+                "waveType": 1,
+                "briefDescribe": "self-consumption",
+                "solarPriority": "1,3,2",
+                "gridDischargeMax": null,
+                "gridChargeMax": null,
+                "chargeMax": null,
+                "chargePower": null,
+                "gridFeedMax": null,
+                "dischargePower": null,
+                "dischargeMax": null,
+                "solarCutoff": 0,
+                "gridMax": null,
+                "loadPriority": "1,3,2",
+                "maxChargeSoc": null,
+                "minDischargeSoc": null,
+                "heatEnable": null,
+                "powerOffApower": "",
+                "offGrid": null,
+                "gcaoMax": null,
+                "rampTime": null,
+                "useModeFlag": 0,
+                "dispatchId": 6,
+                "dispatch": null,
+                "buyRate": null,
+                "sellRate": null
+              }
+            ]
+          }
+        ],
+        "bbDefaultVo": null
+      },
+      "success": true
+    },
+    "status": 200
+  }
+]

File diff ditekan karena terlalu besar
+ 1655 - 0
service/test/tou/模版测试.test.franklinwh.com.har


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini