siteAnalysisData.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package pgsql_original
  2. import (
  3. "errors"
  4. "fmt"
  5. "fwh-toolbox-server/database"
  6. "fwh-toolbox-server/domain"
  7. "time"
  8. "go.uber.org/zap"
  9. "gorm.io/datatypes"
  10. "gorm.io/gorm"
  11. )
  12. type LogOriginalRecord struct {
  13. ID uint `gorm:"primaryKey"`
  14. SN string
  15. CmdType string
  16. Time time.Time `gorm:"type:timestamp without time zone"`
  17. Data datatypes.JSON `gorm:"type:jsonb"` // ✅ 指定 PostgreSQL JSONB 类型
  18. }
  19. type QuerySitesAnalysisRecord struct {
  20. Name string
  21. DB *gorm.DB
  22. }
  23. func CreateSitesAnalysisRecordTable(name string) (*QuerySitesAnalysisRecord, error) {
  24. tabName := "original." + name
  25. // 动态建表
  26. if !database.PgSQL.Migrator().HasTable(tabName) {
  27. if err := database.PgSQL.Table(tabName).AutoMigrate(&LogOriginalRecord{}); err != nil {
  28. zap.L().Error("AutoMigrate SitesAnalysisRecordTable failed", zap.String("err", err.Error()))
  29. return nil, err
  30. }
  31. }
  32. return &QuerySitesAnalysisRecord{
  33. Name: tabName,
  34. DB: database.PgSQL.Table(tabName),
  35. }, nil
  36. }
  37. func (query *QuerySitesAnalysisRecord) InsertSitesAnalysisRecord(data domain.MqttLogItem) error {
  38. if query.DB == nil {
  39. zap.L().Error("数据库未初始化,请先调用CreateSitesAnalysisRecordTable初始化数据库。")
  40. return errors.New("please call CreateSitesAnalysisRecordTable to initialize the database first")
  41. }
  42. logTime, err := time.Parse(time.DateTime, data.LogTime)
  43. if err != nil {
  44. zap.L().Error("logTime格式错误", zap.String("time", data.LogTime), zap.String("err", err.Error()))
  45. return fmt.Errorf("logTime格式错误 logTime=%s %w", data.LogTime, err)
  46. }
  47. record := LogOriginalRecord{
  48. SN: data.GatewayId,
  49. CmdType: data.CmdType,
  50. Time: logTime,
  51. Data: datatypes.JSON(data.LogData),
  52. }
  53. if err := query.DB.Create(&record).Error; err != nil {
  54. zap.L().Error("插入LogOriginalRecord数据失败", zap.String("err", err.Error()))
  55. return fmt.Errorf("插入LogOriginalRecord数据失败 %w", err)
  56. }
  57. return nil
  58. }