package models import ( "fmt" "github.com/beego/beego/v2/client/orm" "time" ) type EdbInfo struct { EdbInfoId int `orm:"column(edb_info_id);pk"` SourceName string `description:"来源名称"` Source int `description:"来源id"` EdbCode string `description:"指标编码"` EdbName string `description:"指标名称"` EdbNameSource string `description:"指标名称来源"` Frequency string `description:"频率"` Unit string `description:"单位"` StartDate string `description:"起始日期"` EndDate string `description:"终止日期"` ClassifyId int `description:"分类id"` SysUserId int SysUserRealName string UniqueCode string `description:"指标唯一编码"` CreateTime time.Time ModifyTime time.Time MinValue float64 `description:"指标最小值"` MaxValue float64 `description:"指标最大值"` CalculateFormula string `description:"计算公式"` EdbType int `description:"指标类型:1:基础指标,2:计算指标"` Sort int `description:"排序字段"` MoveType int `description:"移动方式:1:领先(默认),2:滞后"` MoveFrequency string `description:"移动频度"` } // AddEdbInfo 添加指标 func AddEdbInfo(item *EdbInfo) (lastId int64, err error) { o := orm.NewOrm() lastId, err = o.Insert(item) return } // EdbInfoList 指标数据列表 type EdbInfoList struct { EdbInfoId int `orm:"column(edb_info_id);pk"` SourceName string `description:"来源名称"` Source int `description:"来源id"` EdbCode string `description:"指标编码"` EdbName string `description:"指标名称"` Frequency string `description:"频率"` Unit string `description:"单位"` StartDate string `description:"起始日期"` EndDate string `description:"终止日期"` ClassifyId int `description:"分类id"` UniqueCode string `description:"指标唯一编码"` SysUserId int `description:"创建人id"` SysUserRealName string `description:"创建人姓名"` ModifyTime string `description:"最新修改时间"` EdbNameAlias string `json:"-" description:"指标名称,别名"` EdbType int `description:"指标类型:1:基础指标,2:计算指标"` DataList []*EdbData } // GetEdbInfoByName 根据指标名称获取所有的指标数据列表 func GetEdbInfoByName(edbName string) (items []*EdbInfoList, err error) { o := orm.NewOrm() sql := ` SELECT * FROM edb_info WHERE edb_name=? ` _, err = o.Raw(sql, edbName).QueryRows(&items) return } // ModifyEdbInfoNameSource 根据来源修改指标名称 func ModifyEdbInfoNameSource(edbNameSource string, edbInfoId int) (err error) { o := orm.NewOrm() sql := ` UPDATE edb_info SET edb_name_source=? WHERE edb_info_id = ? ` _, err = o.Raw(sql, edbNameSource, edbInfoId).Exec() return } // GetEdbInfoById 根据指标id获取指标信息 func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) { o := orm.NewOrm() sql := ` SELECT * FROM edb_info WHERE edb_info_id=? ` err = o.Raw(sql, edbInfoId).QueryRow(&item) return } // EdbInfoSearchData type EdbInfoSearchData struct { EdbDataId int `description:"数据ID"` DataTime string `description:"数据日期"` Value float64 `description:"数据"` } // GetEdbDataListAll 获取指标数据列表 order:1升序,其余值为降序 func GetEdbDataListAll(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchData, err error) { o := orm.NewOrm() sql := `` tableName := GetEdbDataTableName(source) sql = ` SELECT * FROM %s WHERE 1=1 ` sql = fmt.Sprintf(sql, tableName) if condition != "" { sql += condition } if order == 1 { sql += ` ORDER BY data_time ASC ` } else { sql += ` ORDER BY data_time DESC ` } _, err = o.Raw(sql, pars).QueryRows(&item) return } // EdbInfoMaxAndMinInfo 指标最新数据记录结构体 type EdbInfoMaxAndMinInfo struct { MinDate string `description:"最小日期"` MaxDate string `description:"最大日期"` MinValue float64 `description:"最小值"` MaxValue float64 `description:"最大值"` LatestValue float64 `description:"最新值"` } // GetEdbInfoMaxAndMinInfo 获取指标的最新数据记录信息 func GetEdbInfoMaxAndMinInfo(source int, edbCode string) (item *EdbInfoMaxAndMinInfo, err error) { o := orm.NewOrm() sql := `` tableName := GetEdbDataTableName(source) sql = ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date,MIN(value) AS min_value,MAX(value) AS max_value FROM %s WHERE edb_code=? ` sql = fmt.Sprintf(sql, tableName) err = o.Raw(sql, edbCode).QueryRow(&item) var latest_value float64 sql = ` SELECT value AS latest_value FROM %s WHERE edb_code=? ORDER BY data_time DESC LIMIT 1 ` sql = fmt.Sprintf(sql, tableName) err = o.Raw(sql, edbCode).QueryRow(&latest_value) item.LatestValue = latest_value return } // ModifyEdbInfoMaxAndMinInfo 修改指标的最新数据信息 func ModifyEdbInfoMaxAndMinInfo(edbInfoId int, item *EdbInfoMaxAndMinInfo) (err error) { o := orm.NewOrm() sql := ` UPDATE edb_info SET start_date=?,end_date=?,min_value=?,max_value=?,is_update=2,latest_date=?,latest_value=?,modify_time=NOW() WHERE edb_info_id=? ` _, err = o.Raw(sql, item.MinDate, item.MaxDate, item.MinValue, item.MaxValue, item.MaxDate, item.LatestValue, edbInfoId).Exec() return } // GetEdbDataCount 获取edb指标数据的数量; order:1升序,其余值为降序 func GetEdbDataCount(condition string, pars []interface{}, source int) (count int, err error) { o := orm.NewOrm() sql := `` tableName := GetEdbDataTableName(source) sql = ` SELECT COUNT(1) AS count FROM %s WHERE 1=1 ` sql = fmt.Sprintf(sql, tableName) if condition != "" { sql += condition } err = o.Raw(sql, pars).QueryRow(&count) return } // GetLastEdbData 获取最近的一条指标数据 func GetLastEdbData(condition string, pars []interface{}, source int) (item *EdbInfoSearchData, err error) { o := orm.NewOrm() sql := `` tableName := GetEdbDataTableName(source) sql = ` SELECT * FROM %s WHERE 1=1 ` sql = fmt.Sprintf(sql, tableName) if condition != "" { sql += condition } sql += ` ORDER BY data_time DESC ` err = o.Raw(sql, pars).QueryRow(&item) return } // GetEdbInfoByEdbCode 根据指标code获取指标信息 func GetEdbInfoByEdbCode(source int, edbCode string) (item *EdbInfo, err error) { o := orm.NewOrm() sql := ` SELECT * FROM edb_info WHERE source=? AND edb_code=? ` err = o.Raw(sql, source, edbCode).QueryRow(&item) return } // GetEdbInfoCalculateListByCondition 获取指标关系列表 func GetEdbInfoCalculateListByCondition(condition string, pars []interface{}) (items []*EdbInfoCalculateMapping, err error) { o := orm.NewOrm() sql := ` SELECT * FROM edb_info_calculate_mapping WHERE 1=1 ` if condition != "" { sql += condition } _, err = o.Raw(sql, pars).QueryRows(&items) return } // GetEdbInfoCalculateCountByCondition 获取关联指标数量 func GetEdbInfoCalculateCountByCondition(condition string, pars []interface{}) (count int, err error) { o := orm.NewOrm() sql := ` SELECT COUNT(1) AS count FROM edb_info_calculate_mapping WHERE 1=1 ` if condition != "" { sql += condition } err = o.Raw(sql, pars).QueryRow(&count) return } //优化版本-处理数据精度问题 type EdbInfoSearchDataV1 struct { EdbDataId int `description:"数据ID"` DataTime string `description:"数据日期"` Value string `description:"数据"` } //优化版本-处理数据精度问题 func GetEdbDataListAllV1(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchDataV1, err error) { o := orm.NewOrm() sql := `` tableName := GetEdbDataTableName(source) sql = ` SELECT * FROM %s WHERE 1=1 ` sql = fmt.Sprintf(sql, tableName) if condition != "" { sql += condition } if order == 1 { sql += ` ORDER BY data_time ASC ` } else { sql += ` ORDER BY data_time DESC ` } _, err = o.Raw(sql, pars).QueryRows(&item) return }