modelRT/network/circuit_diagram_update_requ...

164 lines
5.9 KiB
Go

// Package network define struct of network operation
package network
import (
"fmt"
"time"
"modelRT/common/errcode"
"modelRT/constants"
"modelRT/orm"
"github.com/gofrs/uuid"
)
// TopologicChangeInfo defines circuit diagram topologic change info
type TopologicChangeInfo struct {
ChangeType int `json:"change_type"`
Flag int `json:"flag"`
OldUUIDFrom string `json:"old_uuid_from"`
OldUUIDTo string `json:"old_uuid_to"`
NewUUIDFrom string `json:"new_uuid_from"`
NewUUIDTo string `json:"new_uuid_to"`
Comment string `json:"comment"`
}
// TopologicUUIDChangeInfos defines circuit diagram topologic uuid change info
type TopologicUUIDChangeInfos struct {
ChangeType int `json:"change_type"`
Flag int `json:"flag"`
OldUUIDFrom uuid.UUID `json:"old_uuid_from"`
OldUUIDTo uuid.UUID `json:"old_uuid_to"`
NewUUIDFrom uuid.UUID `json:"new_uuid_from"`
NewUUIDTo uuid.UUID `json:"new_uuid_to"`
Comment string `json:"comment"`
}
// ComponentUpdateInfo defines circuit diagram component params info
type ComponentUpdateInfo struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Name string `json:"name"`
Context map[string]any `json:"context"`
GridID int64 `json:"grid_id"`
ZoneID int64 `json:"zone_id"`
StationID int64 `json:"station_id"`
Params string `json:"params"`
Op int `json:"op"`
Tag string `json:"tag"`
}
// CircuitDiagramUpdateRequest defines request params of circuit diagram update api
type CircuitDiagramUpdateRequest struct {
PageID int64 `json:"page_id"`
FreeVertexs []string `json:"free_vertexs"`
TopologicLinks []TopologicChangeInfo `json:"topologics"`
ComponentInfos []ComponentUpdateInfo `json:"component_infos"`
}
// ParseUUID define parse UUID by change type in topologic change struct
func ParseUUID(info TopologicChangeInfo) (TopologicUUIDChangeInfos, error) {
var UUIDChangeInfo TopologicUUIDChangeInfos
UUIDChangeInfo.ChangeType = info.ChangeType
switch info.ChangeType {
case constants.UUIDFromChangeType:
if info.NewUUIDFrom == info.OldUUIDFrom {
return UUIDChangeInfo, fmt.Errorf("topologic change data check failed:%w", constants.ErrUUIDFromCheckT1)
}
if info.NewUUIDTo != info.OldUUIDTo {
return UUIDChangeInfo, fmt.Errorf("topologic change data check failed:%w", constants.ErrUUIDToCheckT1)
}
oldUUIDFrom, err := uuid.FromString(info.OldUUIDFrom)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,old uuid_from value:%s", info.OldUUIDFrom)
}
UUIDChangeInfo.OldUUIDFrom = oldUUIDFrom
newUUIDFrom, err := uuid.FromString(info.NewUUIDFrom)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,new uuid_from value:%s", info.NewUUIDFrom)
}
UUIDChangeInfo.NewUUIDFrom = newUUIDFrom
OldUUIDTo, err := uuid.FromString(info.OldUUIDTo)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,old uuid_to value:%s", info.OldUUIDTo)
}
UUIDChangeInfo.OldUUIDTo = OldUUIDTo
UUIDChangeInfo.NewUUIDTo = OldUUIDTo
case constants.UUIDToChangeType:
if info.NewUUIDFrom != info.OldUUIDFrom {
return UUIDChangeInfo, fmt.Errorf("topologic change data check failed:%w", constants.ErrUUIDFromCheckT2)
}
if info.NewUUIDTo == info.OldUUIDTo {
return UUIDChangeInfo, fmt.Errorf("topologic change data check failed:%w", constants.ErrUUIDToCheckT2)
}
oldUUIDFrom, err := uuid.FromString(info.OldUUIDFrom)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,old uuid_from value:%s", info.OldUUIDFrom)
}
UUIDChangeInfo.OldUUIDFrom = oldUUIDFrom
UUIDChangeInfo.NewUUIDFrom = oldUUIDFrom
OldUUIDTo, err := uuid.FromString(info.OldUUIDTo)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,old uuid_to value:%s", info.OldUUIDTo)
}
UUIDChangeInfo.OldUUIDTo = OldUUIDTo
newUUIDTo, err := uuid.FromString(info.NewUUIDTo)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,new uuid_to value:%s", info.NewUUIDTo)
}
UUIDChangeInfo.NewUUIDTo = newUUIDTo
case constants.UUIDAddChangeType:
if info.OldUUIDFrom != "" {
return UUIDChangeInfo, fmt.Errorf("topologic change data check failed:%w", constants.ErrUUIDFromCheckT3)
}
if info.OldUUIDTo != "" {
return UUIDChangeInfo, fmt.Errorf("topologic change data check failed:%w", constants.ErrUUIDToCheckT3)
}
newUUIDFrom, err := uuid.FromString(info.NewUUIDFrom)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,new uuid_from value:%s", info.NewUUIDFrom)
}
UUIDChangeInfo.NewUUIDFrom = newUUIDFrom
newUUIDTo, err := uuid.FromString(info.NewUUIDTo)
if err != nil {
return UUIDChangeInfo, fmt.Errorf("convert data from string type to uuid type failed,new uuid_to value:%s", info.NewUUIDTo)
}
UUIDChangeInfo.NewUUIDTo = newUUIDTo
default:
return UUIDChangeInfo, errcode.ErrUUIDChangeType
}
UUIDChangeInfo.Flag = info.Flag
UUIDChangeInfo.Comment = info.Comment
return UUIDChangeInfo, nil
}
// ConvertComponentUpdateInfosToComponents define convert component update info to component struct
func ConvertComponentUpdateInfosToComponents(updateInfo ComponentUpdateInfo) (*orm.Component, error) {
uuidVal, err := uuid.FromString(updateInfo.UUID)
if err != nil {
return nil, err
}
component := &orm.Component{
GlobalUUID: uuidVal,
// Name: info.Name,
// Context: info.Context,
// GridID: fmt.Sprintf("%d", info.GridID),
// ZoneID: fmt.Sprintf("%d", info.ZoneID),
// StationID: fmt.Sprintf("%d", info.StationID),
// Op: info.Op,
// Tag: info.Tag,
// 其他字段可根据需要补充
Ts: time.Now(),
}
return component, nil
}