添加 submit 表记录每次提交配置;顺序排列提交配置

This commit is contained in:
2025-09-23 19:01:49 +08:00
parent d70bdaae16
commit 923ca32b98
4 changed files with 56 additions and 6 deletions

27
actions/submit.go Normal file
View File

@@ -0,0 +1,27 @@
package actions
import (
"encoding/json"
"fmt"
"time"
"zzman/clients/jd"
"zzman/model"
)
func RecordSubmit(time time.Time, gatewat model.Gateway, edges []jd.EdgeInfo) error {
config, err := json.Marshal(edges)
if err != nil {
return fmt.Errorf("序列化提交数据失败:%w", err)
}
err = model.DB.Create(&model.Submit{
Time: time,
Gateway: gatewat.Macaddr,
Config: string(config),
}).Error
if err != nil {
return fmt.Errorf("保存提交记录失败:%w", err)
}
return nil
}

View File

@@ -70,20 +70,23 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
// 查找需要更新的配置
oldConfigs := make(map[model.City][]model.Config)
newConfigs := make(map[model.Gateway][]ConfigInfo)
for _, gateway := range gateways {
newConfigs[gateway] = make([]ConfigInfo, 250) // 预分配空间,减少扩容
}
for _, config := range configs {
city := findCity[config.Cityhash]
gateway := findGateway[config.GatewayMac]
if config.IsChange == 1 {
oldConfigs[city] = append(oldConfigs[city], config)
} else {
newConfigs[gateway] = append(newConfigs[gateway], ConfigInfo{
newConfigs[gateway][config.Table-1] = ConfigInfo{
Change: false,
Remote: jd.EdgeInfo{
Mac: config.EdgeMac,
City: config.Cityhash,
Network: config.Network,
},
})
}
}
}
@@ -126,7 +129,7 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
slog.Debug(fmt.Sprintf("网关配置变更,网关:%s旧节点%s新节点%s", gateway.Macaddr, config.EdgeMac, edge.Macaddr))
newConfigs[gateway] = append(newConfigs[gateway], ConfigInfo{
newConfigs[gateway][config.Table-1] = ConfigInfo{
Change: true,
Remote: jd.EdgeInfo{
Mac: edge.Macaddr,
@@ -139,7 +142,7 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
IsChange: u.P(0),
IsOnline: u.P(1),
},
})
}
changesCreate = append(changesCreate, model.Change{
Time: now,
CityId: city.Id,
@@ -199,6 +202,12 @@ func update(tx *gorm.DB, arg UpdateArgs) error {
return fmt.Errorf("更新网关 %s 本地配置失败:%w", gateway.Macaddr, err)
}
// 记录提交配置
err = RecordSubmit(now, gateway, edges)
if err != nil {
return fmt.Errorf("记录网关 %s 提交配置失败:%w", gateway.Macaddr, err)
}
// 提交配置到云端:配置版本 gateway.ConfigVersion
if !arg.Mock {
err := jd.GatewayConfigSet(gateway.ConfigVersion, gateway.Macaddr, edges)

View File

@@ -3,7 +3,7 @@ package model
type Config struct {
Id int `gorm:"column:id;primaryKey"`
GatewayMac string `gorm:"column:macaddr"`
Table string `gorm:"column:table"`
Table int `gorm:"column:table"`
EdgeMac string `gorm:"column:edge"`
Network string `gorm:"column:network"`
Cityhash string `gorm:"column:cityhash"`

14
model/submit.go Normal file
View File

@@ -0,0 +1,14 @@
package model
import "time"
type Submit struct {
Id int `gorm:"column:id;primaryKey"`
Time time.Time `gorm:"column:time"`
Gateway string `gorm:"column:gateway"`
Config string `gorm:"column:config"`
}
func (Submit) TableName() string {
return "submit"
}