| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package pgsql_original
- import (
- "errors"
- "fmt"
- "fwh-toolbox-server/database"
- "fwh-toolbox-server/domain"
- "time"
- "go.uber.org/zap"
- "gorm.io/datatypes"
- "gorm.io/gorm"
- )
- type LogOriginalRecord struct {
- ID uint `gorm:"primaryKey"`
- SN string
- CmdType string
- Time time.Time `gorm:"type:timestamp without time zone"`
- Data datatypes.JSON `gorm:"type:jsonb"` // ✅ 指定 PostgreSQL JSONB 类型
- }
- type QuerySitesAnalysisRecord struct {
- Name string
- DB *gorm.DB
- }
- func CreateSitesAnalysisRecordTable(name string) (*QuerySitesAnalysisRecord, error) {
- tabName := "original." + name
- // 动态建表
- if !database.PgSQL.Migrator().HasTable(tabName) {
- if err := database.PgSQL.Table(tabName).AutoMigrate(&LogOriginalRecord{}); err != nil {
- zap.L().Error("AutoMigrate SitesAnalysisRecordTable failed", zap.String("err", err.Error()))
- return nil, err
- }
- }
- return &QuerySitesAnalysisRecord{
- Name: tabName,
- DB: database.PgSQL.Table(tabName),
- }, nil
- }
- func (query *QuerySitesAnalysisRecord) InsertSitesAnalysisRecord(data domain.MqttLogItem) error {
- if query.DB == nil {
- zap.L().Error("数据库未初始化,请先调用CreateSitesAnalysisRecordTable初始化数据库。")
- return errors.New("please call CreateSitesAnalysisRecordTable to initialize the database first")
- }
- logTime, err := time.Parse(time.DateTime, data.LogTime)
- if err != nil {
- zap.L().Error("logTime格式错误", zap.String("time", data.LogTime), zap.String("err", err.Error()))
- return fmt.Errorf("logTime格式错误 logTime=%s %w", data.LogTime, err)
- }
- record := LogOriginalRecord{
- SN: data.GatewayId,
- CmdType: data.CmdType,
- Time: logTime,
- Data: datatypes.JSON(data.LogData),
- }
- if err := query.DB.Create(&record).Error; err != nil {
- zap.L().Error("插入LogOriginalRecord数据失败", zap.String("err", err.Error()))
- return fmt.Errorf("插入LogOriginalRecord数据失败 %w", err)
- }
- return nil
- }
|