// Package data_manage @Author gmy 2024/8/7 9:50:00
package data_manage

import (
	"eta/eta_api/utils"
	"github.com/beego/beego/v2/client/orm"
)

type BaseFromRzdData struct {
	BaseFromRzdDataId  int     `orm:"column(base_from_rzd_data_id);pk"`
	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)"`
}

// 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 init() {
	orm.RegisterModel(new(BaseFromRzdData))
}

func GetRzdIndexDataCountGroup(indexCodes []string) (items []*RzdIndexDataCountGroup, err error) {
	if len(indexCodes) <= 0 {
		return
	}
	o := orm.NewOrmUsingDB("data")
	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).QueryRows(&items)
	return
}

func GetRzdIndexData(indexCode string, startSize, pageSize int) (items []*BaseFromRzdData, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := ` SELECT *  FROM base_from_rzd_data WHERE index_code=? ORDER BY data_time DESC LIMIT ?,? `
	_, err = o.Raw(sql, indexCode, startSize, pageSize).QueryRows(&items)
	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 := orm.NewOrmUsingDB("data")
	_, err = o.Raw(sql, indexCode).QueryRows(&items)
	return
}

// GetRzdDataListByIndexCodes 根据指标编码查询
func GetRzdDataListByIndexCodes(IndexCodes string) (items []string, err error) {
	sql := ` SELECT data_time FROM base_from_rzd_data WHERE index_code IN(` + IndexCodes + `)  GROUP BY data_time DESC `
	o := orm.NewOrmUsingDB("data")
	_, err = o.Raw(sql).QueryRows(&items)
	return
}