// 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 }