check_sysmodel_ied_relation.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package bo
  2. import (
  3. "fmt"
  4. "scd_check_tools/logger"
  5. "scd_check_tools/models/enum"
  6. "scd_check_tools/tools"
  7. "strconv"
  8. "sync"
  9. "github.com/astaxie/beego/orm"
  10. )
  11. //系统内置模型-装置关系
  12. type T_data_model_relation_def struct {
  13. Id int `orm:"pk"`
  14. ModelId int // '模型ID' ,
  15. FromIedCode string // '装置类型1;关联代码:device_type',
  16. FromIedName string // '装置名称1',
  17. ToIedName string // '装置名称2',
  18. ToIedCode string // '装置类型2;关联代码:device_type',
  19. InType string // '输入端子类型;SV,GOOSE',
  20. Cr int // '创建人' ,
  21. Ct string `orm:"-"` // '创建时间' ,
  22. Ur int // '更新人' ,
  23. Ut string `orm:"-"` // '更新时间'
  24. }
  25. //内置检测模型-装置类型关系管理对象
  26. type SysCheckModelIedRelationMgr struct {
  27. Model T_data_model_relation_def
  28. DeviceBaseModel
  29. }
  30. var sysCheckModel_iedRelationDesc = "内置检测模型-装置类型关系"
  31. var SysModelRelationList = sync.Map{}
  32. func init() {
  33. orm.RegisterModel(new(T_data_model_relation_def))
  34. }
  35. //保存检测模型装置关系信息
  36. func (c *SysCheckModelIedRelationMgr) Save(nodes map[string]interface{}) (err error) {
  37. if nodes == nil {
  38. return
  39. }
  40. dblog := new(SystemLog)
  41. dblog.SetUserInfo(c.GetUserInfo())
  42. dblog.Audittype = enum.AuditType_check_model
  43. dblog.Logtype = enum.LogType_Insert
  44. dblog.Eventtype = enum.OptEventType_Bus
  45. dblog.Eventlevel = enum.OptEventLevel_Hight
  46. db := orm.NewOrm()
  47. oldIedTypes := []orm.Params{} //原有的装置类型
  48. 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)
  49. _, err = db.Raw("delete from t_data_model_relation_def where model_id=?", c.Model.ModelId).Exec()
  50. if err != nil {
  51. logger.Logger.Error(err)
  52. dblog.Description = fmt.Sprintf("保存%s信息失败:%s,操作数据:%+v", sysCheckModel_iedRelationDesc, err.Error(), c.Model)
  53. dblog.Fail2()
  54. } else {
  55. tmpMap := map[string]interface{}{}
  56. for _, item2 := range nodes["nodes"].([]interface{}) {
  57. item := item2.(map[string]interface{})
  58. tmpMap[tools.IsEmpty(item["id"])] = item
  59. }
  60. newIedTypes := map[string]string{}
  61. for _, line2 := range nodes["edges"].([]interface{}) {
  62. line := line2.(map[string]interface{})
  63. sourceied := tools.IsEmpty(line["sourceNodeId"])
  64. targetied := tools.IsEmpty(line["targetNodeId"])
  65. isSv := ""
  66. if line["properties"] != nil {
  67. isSv = tools.IsEmpty(line["properties"].(map[string]interface{})["issv"])
  68. }
  69. newm := T_data_model_relation_def{}
  70. newm.ModelId = c.Model.ModelId
  71. newm.Cr, _ = strconv.Atoi(c.GetUserId())
  72. item := tmpMap[sourceied].(map[string]interface{})
  73. newm.FromIedCode = tools.IsEmpty(item["properties"].(map[string]interface{})["ied_type"])
  74. newIedTypes[newm.FromIedCode] = newm.FromIedCode
  75. newm.FromIedName = tools.IsEmpty(item["text"].(map[string]interface{})["value"])
  76. if isSv == "" {
  77. newm.InType = "GOOSE"
  78. } else {
  79. newm.InType = isSv
  80. }
  81. item = tmpMap[targetied].(map[string]interface{})
  82. newm.ToIedCode = tools.IsEmpty(item["properties"].(map[string]interface{})["ied_type"])
  83. newIedTypes[newm.ToIedCode] = newm.ToIedCode
  84. newm.ToIedName = tools.IsEmpty(item["text"].(map[string]interface{})["value"])
  85. _, err = db.Insert(&newm)
  86. if err != nil {
  87. logger.Logger.Error(err)
  88. return err
  89. }
  90. }
  91. SysModelRelationList.Delete(c.Model.ModelId)
  92. if len(oldIedTypes) > 0 {
  93. s1 := new(SysCheckModelIedFuncMgr)
  94. s1.SetUserInfo(c.GetUserInfo())
  95. s1.Model = T_data_model_func_def{ModelId: c.Model.ModelId}
  96. //找出其中进行了删除的装置类型
  97. for _, item := range oldIedTypes {
  98. t := tools.IsEmpty(item["c"])
  99. if newIedTypes[t] == "" {
  100. //删除当前装置类型数据
  101. s1.Model.IedType = t
  102. s1.Delete()
  103. }
  104. }
  105. }
  106. dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", sysCheckModel_iedRelationDesc, c.Model)
  107. dblog.Success2()
  108. }
  109. return err
  110. }
  111. //根据model中指定的id删除
  112. func (c *SysCheckModelIedRelationMgr) Delete() (err error) {
  113. dblog := new(SystemLog)
  114. dblog.SetUserInfo(c.GetUserInfo())
  115. dblog.Audittype = enum.AuditType_check_model
  116. dblog.Logtype = enum.LogType_Delete
  117. dblog.Eventtype = enum.OptEventType_Bus
  118. dblog.Eventlevel = enum.OptEventLevel_Hight
  119. db := orm.NewOrm()
  120. _, err = db.Raw("delete from t_data_model_relation_def where model_id=?", c.Model.ModelId).Exec()
  121. if err != nil {
  122. logger.Logger.Error(err)
  123. dblog.Description = fmt.Sprintf("删除%s(%d)失败:%s", sysCheckModel_iedRelationDesc, c.Model.ModelId, err.Error())
  124. dblog.Fail2()
  125. } else {
  126. SysModelRelationList.Delete(c.Model.ModelId)
  127. dblog.Description = fmt.Sprintf("删除%s(%d)成功", sysCheckModel_iedRelationDesc, c.Model.ModelId)
  128. dblog.Success2()
  129. }
  130. return err
  131. }
  132. //复制模型
  133. func (c *SysCheckModelIedRelationMgr) Copy(newModelId int) (error, int) {
  134. dblog := new(SystemLog)
  135. dblog.SetUserInfo(c.GetUserInfo())
  136. dblog.Audittype = enum.AuditType_check_model
  137. dblog.Logtype = enum.LogType_Query
  138. dblog.Eventtype = enum.OptEventType_Bus
  139. dblog.Eventlevel = enum.OptEventLevel_Low
  140. o := orm.NewOrm()
  141. 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=?"
  142. r, err := o.Raw(sql, newModelId, c.Model.ModelId).Exec()
  143. if err != nil {
  144. logger.Logger.Error(err)
  145. dblog.Description = fmt.Sprintf("复制%s(%d)失败:%s", sysCheckModel_iedRelationDesc, newModelId, err.Error())
  146. dblog.Fail2()
  147. return err, 0
  148. } else {
  149. dblog.Description = fmt.Sprintf("复制%s(%d)成功", sysCheckModel_iedRelationDesc, newModelId)
  150. dblog.Success2()
  151. id, _ := r.LastInsertId()
  152. return nil, int(id)
  153. }
  154. return nil, 0
  155. }
  156. //获取指定电压等级下的所有模型
  157. func (c *SysCheckModelIedRelationMgr) GetListByModelid(modelid int) ([]orm.Params, error) {
  158. if v, h := SysModelRelationList.Load(modelid); h {
  159. return v.([]orm.Params), nil
  160. }
  161. o := orm.NewOrm()
  162. sqlParamters := []interface{}{modelid}
  163. sql := "select t.* from t_data_model_relation_def t where t.model_id=?"
  164. rowset := []orm.Params{}
  165. _, err := o.Raw(sql, sqlParamters).Values(&rowset)
  166. if err != nil {
  167. logger.Logger.Error(err)
  168. } else {
  169. SysModelRelationList.Store(modelid, rowset)
  170. }
  171. return rowset, err
  172. }