package bo import ( "fmt" "scd_check_tools/logger" "scd_check_tools/models/enum" "scd_check_tools/tools" "strconv" "sync" "github.com/astaxie/beego/orm" ) //系统内置模型-装置关系 type T_data_model_relation_def struct { Id int `orm:"pk"` ModelId int // '模型ID' , FromIedCode string // '装置类型1;关联代码:device_type', FromIedName string // '装置名称1', ToIedName string // '装置名称2', ToIedCode string // '装置类型2;关联代码:device_type', InType string // '输入端子类型;SV,GOOSE', Cr int // '创建人' , Ct string `orm:"-"` // '创建时间' , Ur int // '更新人' , Ut string `orm:"-"` // '更新时间' } //内置检测模型-装置类型关系管理对象 type SysCheckModelIedRelationMgr struct { Model T_data_model_relation_def DeviceBaseModel } var sysCheckModel_iedRelationDesc = "内置检测模型-装置类型关系" var SysModelRelationList = sync.Map{} func init() { orm.RegisterModel(new(T_data_model_relation_def)) } //保存检测模型装置关系信息 func (c *SysCheckModelIedRelationMgr) Save(nodes map[string]interface{}) (err error) { if nodes == nil { return } dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_check_model dblog.Logtype = enum.LogType_Insert dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight db := orm.NewOrm() _, err = db.Raw("delete from t_data_model_relation_def where model_id=?", c.Model.ModelId).Exec() if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("保存%s信息失败:%s,操作数据:%+v", sysCheckModel_iedRelationDesc, err.Error(), c.Model) dblog.Fail2() } else { tmpMap := map[string]interface{}{} for _, item2 := range nodes["nodes"].([]interface{}) { item := item2.(map[string]interface{}) tmpMap[tools.IsEmpty(item["id"])] = item } for _, line2 := range nodes["edges"].([]interface{}) { line := line2.(map[string]interface{}) sourceied := tools.IsEmpty(line["sourceNodeId"]) targetied := tools.IsEmpty(line["targetNodeId"]) isSv := "" if line["properties"] != nil { isSv = tools.IsEmpty(line["properties"].(map[string]interface{})["issv"]) } newm := T_data_model_relation_def{} newm.ModelId = c.Model.ModelId newm.Cr, _ = strconv.Atoi(c.GetUserId()) item := tmpMap[sourceied].(map[string]interface{}) newm.FromIedCode = tools.IsEmpty(item["properties"].(map[string]interface{})["ied_type"]) newm.FromIedName = tools.IsEmpty(item["text"].(map[string]interface{})["value"]) if isSv == "" { newm.InType = "GOOSE" } else { newm.InType = isSv } item = tmpMap[targetied].(map[string]interface{}) newm.ToIedCode = tools.IsEmpty(item["properties"].(map[string]interface{})["ied_type"]) newm.ToIedName = tools.IsEmpty(item["text"].(map[string]interface{})["value"]) _, err = db.Insert(&newm) if err != nil { logger.Logger.Error(err) return err } } SysModelRelationList.Delete(c.Model.ModelId) dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", sysCheckModel_iedRelationDesc, c.Model) dblog.Success2() } return err } //根据model中指定的id删除 func (c *SysCheckModelIedRelationMgr) Delete() (err error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_check_model dblog.Logtype = enum.LogType_Delete dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight db := orm.NewOrm() _, err = db.Raw("delete from t_data_model_relation_def where model_id=?", c.Model.ModelId).Exec() if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("删除%s(%d)失败:%s", sysCheckModel_iedRelationDesc, c.Model.ModelId, err.Error()) dblog.Fail2() } else { SysModelRelationList.Delete(c.Model.ModelId) dblog.Description = fmt.Sprintf("删除%s(%d)成功", sysCheckModel_iedRelationDesc, c.Model.ModelId) dblog.Success2() } return err } //复制模型 func (c *SysCheckModelIedRelationMgr) Copy(fromModelId int) (error, int) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_check_model dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Low o := orm.NewOrm() o.Read(&c.Model) sql := "insert into t_data_model_defualt(model_name,area_type,vol_id,line_link_style,ied_types,relation_json,is_sys)values(?,?,?,?,?,?,?)" r, err := o.Raw(sql).Exec() if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("复制%s(%d)失败:%s", sysCheckModel_iedRelationDesc, fromModelId, err.Error()) dblog.Fail2() return err, 0 } else { dblog.Description = fmt.Sprintf("复制%s(%d)成功", sysCheckModel_iedRelationDesc, fromModelId) dblog.Success2() id, _ := r.LastInsertId() return nil, int(id) } return nil, 0 } //获取指定电压等级下的所有模型 func (c *SysCheckModelIedRelationMgr) GetListByModelid(modelid int) ([]orm.Params, error) { if v, h := SysModelRelationList.Load(modelid); h { return v.([]orm.Params), nil } o := orm.NewOrm() sqlParamters := []interface{}{modelid} sql := "select t.* from t_data_model_relation_def t where t.model_id=?" rowset := []orm.Params{} _, err := o.Raw(sql, sqlParamters).Values(&rowset) if err != nil { logger.Logger.Error(err) } else { SysModelRelationList.Store(modelid, rowset) } return rowset, err }