// Package data_manage @Author gmy 2024/8/7 9:50:00 package data_manage import ( "eta/eta_api/global" "eta/eta_api/utils" "gorm.io/gorm" ) type BaseFromRzdData struct { BaseFromRzdDataId int `orm:"column(base_from_rzd_data_id);pk" gorm:"primaryKey"` BaseFromRzdIndexId int `orm:"column(base_from_rzd_index_id)"` CreateTime string `orm:"column(create_time)"` DataTime string `orm:"column(data_time)"` IndexCode string `orm:"column(index_code)"` ModifyTime string `orm:"column(modify_time)"` Value float64 `orm:"column(value)"` } func (baseFromRzdData *BaseFromRzdData) AfterFind(tx *gorm.DB) (err error) { if utils.NeedDateOrTimeFormat(utils.DbDriverName) { if baseFromRzdData.ModifyTime != "" { baseFromRzdData.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromRzdData.ModifyTime) } if baseFromRzdData.CreateTime != "" { baseFromRzdData.CreateTime = utils.GormDateStrToDateTimeStr(baseFromRzdData.CreateTime) } if baseFromRzdData.DataTime != "" { baseFromRzdData.DataTime = utils.GormDateStrToDateStr(baseFromRzdData.DataTime) } } return } // RzdIndexAddReq 指标添加vo type RzdIndexAddReq struct { EdbCode string `description:"指标编码"` EdbName string `description:"指标名称"` Frequency string `description:"频度"` Unit string `description:"单位"` ClassifyId int `description:"分类ID"` AdminId int `description:"管理员ID"` AdminRealName string `description:"管理员名称"` } type RzdIndexDataCountGroup struct { IndexCode string Count int } func GetRzdIndexDataCountGroup(indexCodes []string) (items []*RzdIndexDataCountGroup, err error) { if len(indexCodes) <= 0 { return } o := global.DbMap[utils.DbNameIndex] sql := ` SELECT COUNT(1) AS count, index_code FROM base_from_rzd_data WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY index_code` err = o.Raw(sql, indexCodes).Find(&items).Error return } func GetRzdIndexData(indexCode string, startSize, pageSize int) (items []*BaseFromRzdData, err error) { o := global.DbMap[utils.DbNameIndex] sql := ` SELECT * FROM base_from_rzd_data WHERE index_code=? ORDER BY data_time DESC LIMIT ?,? ` err = o.Raw(sql, indexCode, startSize, pageSize).Find(&items).Error return } // GetBaseFormRzdDataByIndexCode 根据指标编码查询 func GetBaseFormRzdDataByIndexCode(indexCode string) (items []*BaseFromRzdData, err error) { sql := `SELECT * FROM base_from_rzd_data WHERE index_code=? ORDER BY data_time desc` o := global.DbMap[utils.DbNameIndex] err = o.Raw(sql, indexCode).Find(&items).Error return } func GetBaseFormRzdDataByConditionCount(condition string, pars []interface{}) (count int, err error) { o := global.DbMap[utils.DbNameIndex] sql := ` SELECT count(1) FROM base_from_rzd_data WHERE 1=1 ` if condition != "" { sql += condition } err = o.Raw(sql, pars...).Scan(&count).Error if err != nil { return 0, err } return } func GetBaseFormRzdDataByCondition(condition string, pars []interface{}) (items []*BaseFromRzdData, err error) { o := global.DbMap[utils.DbNameIndex] sql := ` SELECT * FROM base_from_rzd_data WHERE 1=1 ` if condition != "" { sql += condition } err = o.Raw(sql, pars...).Find(&items).Error return } // GetRzdDataListByIndexCodes 根据指标编码查询 func GetRzdDataListByIndexCodes(IndexCodes string) (items []string, err error) { sql := ` SELECT DISTINCT data_time FROM base_from_rzd_data WHERE index_code IN(` + IndexCodes + `) ORDER BY data_time DESC ` o := global.DbMap[utils.DbNameIndex] err = o.Raw(sql).Find(&items).Error if utils.NeedDateOrTimeFormat(utils.DbDriverName) { for i := 0; i < len(items); i++ { items[i] = utils.GormDateStrToDateStr(items[i]) } } return } // GetRzdLastUpdateTimeLastByIndexCode 根据指标编码查询 返回ModifyTime最后一条数据 func GetRzdLastUpdateTimeLastByIndexCode(indexCodes []string) (items []*BaseFromRzdData, err error) { o := global.DbMap[utils.DbNameIndex] // 构造 SQL 查询 sql := `SELECT t1.index_code, t1.data_time, t2.value FROM ( SELECT index_code, MAX(data_time) AS data_time FROM base_from_rzd_data WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodes)) + `) GROUP BY index_code ) AS t1 JOIN base_from_rzd_data AS t2 ON t1.index_code = t2.index_code AND t1.data_time = t2.data_time` // 执行 SQL 查询 err = o.Raw(sql, indexCodes).Find(&items).Error if err != nil { return nil, err } return items, nil }