schema.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package models
  2. import (
  3. "time"
  4. "github.com/google/uuid"
  5. "gorm.io/datatypes"
  6. "gorm.io/gorm"
  7. )
  8. // IntegrationSource 接入源
  9. type IntegrationSource struct {
  10. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"ID"`
  11. Name string `gorm:"type:varchar(50)" json:"Name"`
  12. DriverType string `gorm:"type:varchar(20)" json:"DriverType"` // HA, MODBUS
  13. Status string `gorm:"type:varchar(20)" json:"Status"`
  14. Config datatypes.JSON `gorm:"type:jsonb" json:"Config"` // IP, Token
  15. DeviceCount int64 `gorm:"-" json:"DeviceCount"` // 关联设备数量
  16. }
  17. // Device 设备资产
  18. type Device struct {
  19. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  20. SourceID uuid.UUID `gorm:"type:uuid"`
  21. ExternalID string `gorm:"type:varchar(100)"`
  22. Name string `gorm:"type:varchar(100)"`
  23. DeviceType string `gorm:"type:varchar(50)"` // ELECTRIC, WATER, GAS, INDUSTRIAL_ELECTRIC
  24. LocationID *uuid.UUID `gorm:"type:uuid"` // 关联空间
  25. AttributeMapping datatypes.JSON `gorm:"type:jsonb"` // 属性映射
  26. Status string `gorm:"type:varchar(20)"` // NORMAL, INACTIVE
  27. }
  28. // SysLocation 空间拓扑
  29. type SysLocation struct {
  30. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  31. ParentID *uuid.UUID `gorm:"type:uuid"`
  32. Name string `gorm:"type:varchar(50)"`
  33. Type string `gorm:"type:varchar(20)"` // PARK, BUILDING, FLOOR, ROOM
  34. }
  35. // AlarmLog 告警记录
  36. type AlarmLog struct {
  37. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  38. DeviceID uuid.UUID `gorm:"type:uuid"`
  39. Type string `gorm:"type:varchar(50)"`
  40. Content string `gorm:"type:text"`
  41. Status string `gorm:"type:varchar(20)"` // ACTIVE, ACKED, RESOLVED
  42. StartTime time.Time `gorm:"type:timestamp"`
  43. }
  44. // SysOperLog 操作日志
  45. type SysOperLog struct {
  46. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  47. UserID uuid.UUID `gorm:"type:uuid"`
  48. Action string `gorm:"type:varchar(50)"` // TURN_ON, UPDATE_CONFIG
  49. Target string `gorm:"type:varchar(100)"`
  50. Result bool `gorm:"type:boolean"`
  51. Time time.Time `gorm:"type:timestamp"`
  52. }
  53. // InspectionLedger 巡检台账
  54. type InspectionLedger struct {
  55. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  56. DeviceID uuid.UUID `gorm:"type:uuid"`
  57. InspectorID uuid.UUID `gorm:"type:uuid"`
  58. Status string `gorm:"type:varchar(20)"` // NORMAL, ABNORMAL
  59. CalibratedPower float64 `gorm:"type:numeric(10,2)"`
  60. CheckTime time.Time `gorm:"type:timestamp"`
  61. }
  62. // SysRole 角色
  63. type SysRole struct {
  64. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  65. Name string `gorm:"type:varchar(50)"`
  66. RoleKey string `gorm:"type:varchar(50)"` // admin, common
  67. DataScope string `gorm:"type:varchar(20)"` // 1:ALL, 4:SELF
  68. MenuCheckStrictly bool `gorm:"default:true"`
  69. Status string `gorm:"type:varchar(1)"` // 0:Normal, 1:Disable
  70. }
  71. // SysUserRole 用户角色关联
  72. type SysUserRole struct {
  73. UserID uuid.UUID `gorm:"type:uuid;primary_key"`
  74. RoleID uuid.UUID `gorm:"type:uuid;primary_key"`
  75. }
  76. // SysConfig 系统配置
  77. type SysConfig struct {
  78. ConfigID int `gorm:"primary_key;autoIncrement"`
  79. ConfigKey string `gorm:"type:varchar(100);unique"`
  80. ConfigValue string `gorm:"type:text"`
  81. ConfigType string `gorm:"type:varchar(10)"` // Y/N
  82. Remark string `gorm:"type:varchar(500)"`
  83. }
  84. // User 用户
  85. type User struct {
  86. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
  87. Username string `gorm:"type:varchar(50);unique"`
  88. Password string `gorm:"type:varchar(100)"` // In production, use hash
  89. Role string `gorm:"type:varchar(20)"` // ADMIN, USER (Deprecated, use SysUserRole)
  90. Name string `gorm:"type:varchar(50)"`
  91. Email *string `gorm:"type:varchar(100);unique"`
  92. PhoneNumber *string `gorm:"type:varchar(20);unique"`
  93. Status string `gorm:"type:varchar(1)"` // 0:Normal, 1:Disable
  94. CreatedAt time.Time `gorm:"autoCreateTime"`
  95. }
  96. // AlarmRuleBinding 告警规则绑定关系
  97. type AlarmRuleBinding struct {
  98. RuleID uuid.UUID `gorm:"type:uuid;primary_key"`
  99. TargetID uuid.UUID `gorm:"type:uuid;primary_key"` // DeviceID or LocationID
  100. TargetType string `gorm:"type:varchar(20)"` // "DEVICE" or "SPACE"
  101. }
  102. // AlarmRule 告警规则配置
  103. type AlarmRule struct {
  104. ID uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
  105. Name string `gorm:"type:varchar(100)" json:"name"`
  106. // Legacy fields for compatibility with existing DB schema
  107. TargetType string `gorm:"type:varchar(20)" json:"-"`
  108. TargetID uuid.UUID `gorm:"type:uuid" json:"-"`
  109. Metric string `gorm:"type:varchar(50)" json:"metric"` // voltage, current, power...
  110. Operator string `gorm:"type:varchar(10)" json:"operator"` // >, <, >=, <=, =
  111. Threshold float64 `gorm:"type:numeric(10,2)" json:"threshold"`
  112. Duration int `gorm:"default:0" json:"duration"` // 持续时间(秒)
  113. SilencePeriod int `gorm:"default:300" json:"silence_period"` // 静默周期(秒)
  114. Priority string `gorm:"type:varchar(20)" json:"priority"` // CRITICAL, WARNING, INFO
  115. Message string `gorm:"type:varchar(255)" json:"message"`
  116. Enabled bool `gorm:"default:true" json:"enabled"`
  117. CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
  118. // Virtual field for API handling
  119. Bindings []AlarmRuleBinding `gorm:"foreignKey:RuleID" json:"bindings,omitempty"`
  120. }
  121. func TableName(name string) func(tx *gorm.DB) *gorm.DB {
  122. return func(tx *gorm.DB) *gorm.DB {
  123. return tx.Table(name)
  124. }
  125. }