check_sysmodel_ied_relation.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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. if item["text"] != nil {
  76. newm.FromIedName = tools.IsEmpty(item["text"].(map[string]interface{})["value"])
  77. }
  78. if isSv == "" {
  79. newm.InType = "GOOSE"
  80. } else {
  81. newm.InType = isSv
  82. }
  83. item = tmpMap[targetied].(map[string]interface{})
  84. newm.ToIedCode = tools.IsEmpty(item["properties"].(map[string]interface{})["ied_type"])
  85. newIedTypes[newm.ToIedCode] = newm.ToIedCode
  86. if item["text"] != nil {
  87. newm.ToIedName = tools.IsEmpty(item["text"].(map[string]interface{})["value"])
  88. }
  89. _, err = db.Insert(&newm)
  90. if err != nil {
  91. logger.Logger.Error(err)
  92. return err
  93. }
  94. }
  95. SysModelRelationList.Delete(c.Model.ModelId)
  96. if len(oldIedTypes) > 0 {
  97. s1 := new(SysCheckModelIedFuncMgr)
  98. s1.SetUserInfo(c.GetUserInfo())
  99. s1.Model = T_data_model_func_def{ModelId: c.Model.ModelId}
  100. //找出其中进行了删除的装置类型
  101. for _, item := range oldIedTypes {
  102. t := tools.IsEmpty(item["c"])
  103. if newIedTypes[t] == "" {
  104. //删除当前装置类型数据
  105. s1.Model.IedType = t
  106. s1.Delete()
  107. }
  108. }
  109. }
  110. dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", sysCheckModel_iedRelationDesc, c.Model)
  111. dblog.Success2()
  112. }
  113. return err
  114. }
  115. //根据model中指定的id删除
  116. func (c *SysCheckModelIedRelationMgr) Delete() (err error) {
  117. dblog := new(SystemLog)
  118. dblog.SetUserInfo(c.GetUserInfo())
  119. dblog.Audittype = enum.AuditType_check_model
  120. dblog.Logtype = enum.LogType_Delete
  121. dblog.Eventtype = enum.OptEventType_Bus
  122. dblog.Eventlevel = enum.OptEventLevel_Hight
  123. db := orm.NewOrm()
  124. _, err = db.Raw("delete from t_data_model_relation_def where model_id=?", c.Model.ModelId).Exec()
  125. if err != nil {
  126. logger.Logger.Error(err)
  127. dblog.Description = fmt.Sprintf("删除%s(%d)失败:%s", sysCheckModel_iedRelationDesc, c.Model.ModelId, err.Error())
  128. dblog.Fail2()
  129. } else {
  130. SysModelRelationList.Delete(c.Model.ModelId)
  131. dblog.Description = fmt.Sprintf("删除%s(%d)成功", sysCheckModel_iedRelationDesc, c.Model.ModelId)
  132. dblog.Success2()
  133. }
  134. return err
  135. }
  136. //复制模型
  137. func (c *SysCheckModelIedRelationMgr) Copy(newModelId int) (error, int) {
  138. dblog := new(SystemLog)
  139. dblog.SetUserInfo(c.GetUserInfo())
  140. dblog.Audittype = enum.AuditType_check_model
  141. dblog.Logtype = enum.LogType_Query
  142. dblog.Eventtype = enum.OptEventType_Bus
  143. dblog.Eventlevel = enum.OptEventLevel_Low
  144. o := orm.NewOrm()
  145. 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=?"
  146. r, err := o.Raw(sql, newModelId, c.Model.ModelId).Exec()
  147. if err != nil {
  148. logger.Logger.Error(err)
  149. dblog.Description = fmt.Sprintf("复制%s(%d)失败:%s", sysCheckModel_iedRelationDesc, newModelId, err.Error())
  150. dblog.Fail2()
  151. return err, 0
  152. } else {
  153. dblog.Description = fmt.Sprintf("复制%s(%d)成功", sysCheckModel_iedRelationDesc, newModelId)
  154. dblog.Success2()
  155. id, _ := r.LastInsertId()
  156. return nil, int(id)
  157. }
  158. return nil, 0
  159. }
  160. //获取指定电压等级下的所有模型
  161. func (c *SysCheckModelIedRelationMgr) GetListByModelid(modelid int) ([]orm.Params, error) {
  162. if v, h := SysModelRelationList.Load(modelid); h {
  163. return v.([]orm.Params), nil
  164. }
  165. o := orm.NewOrm()
  166. sqlParamters := []interface{}{modelid}
  167. sql := "select t.* from t_data_model_relation_def t where t.model_id=?"
  168. rowset := []orm.Params{}
  169. _, err := o.Raw(sql, sqlParamters).Values(&rowset)
  170. if err != nil {
  171. logger.Logger.Error(err)
  172. } else {
  173. SysModelRelationList.Store(modelid, rowset)
  174. }
  175. return rowset, err
  176. }