123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- 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()
- oldIedTypes := []orm.Params{} //原有的装置类型
- db.Raw("select from_ied_code c from t_data_model_relation_def where model_id=? UNION select to_ied_code c from t_data_model_relation_def where model_id=?", c.Model.ModelId, c.Model.ModelId).Values(&oldIedTypes)
- _, 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
- }
- newIedTypes := map[string]string{}
- 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"])
- newIedTypes[newm.FromIedCode] = newm.FromIedCode
- if item["text"] != nil {
- 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"])
- newIedTypes[newm.ToIedCode] = newm.ToIedCode
- if item["text"] != nil {
- 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)
- if len(oldIedTypes) > 0 {
- s1 := new(SysCheckModelIedFuncMgr)
- s1.SetUserInfo(c.GetUserInfo())
- s1.Model = T_data_model_func_def{ModelId: c.Model.ModelId}
- //找出其中进行了删除的装置类型
- for _, item := range oldIedTypes {
- t := tools.IsEmpty(item["c"])
- if newIedTypes[t] == "" {
- //删除当前装置类型数据
- s1.Model.IedType = t
- s1.Delete()
- }
- }
- }
- 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(newModelId 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()
- sql := "insert into t_data_model_relation_def(model_id,custem_model_id,from_ied_code,from_ied_name,to_ied_name,to_ied_code,in_type) select ?,custem_model_id,from_ied_code,from_ied_name,to_ied_name,to_ied_code,in_type from t_data_model_relation_def where model_id=?"
- r, err := o.Raw(sql, newModelId, c.Model.ModelId).Exec()
- if err != nil {
- logger.Logger.Error(err)
- dblog.Description = fmt.Sprintf("复制%s(%d)失败:%s", sysCheckModel_iedRelationDesc, newModelId, err.Error())
- dblog.Fail2()
- return err, 0
- } else {
- dblog.Description = fmt.Sprintf("复制%s(%d)成功", sysCheckModel_iedRelationDesc, newModelId)
- 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
- }
|