package data_manage

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

type EdbUpdateLog struct {
	Id          int64     `json:"id" orm:"column(id);pk"`
	OpDbName    string    `json:"op_db_name"`    // 库名
	OpTableName string    `json:"op_table_name"` // 表名
	OpType      string    `json:"op_type"`       // 变更类型
	OldData     string    `json:"old_data"`      // 历史数据
	NewData     string    `json:"new_data"`      // 新数据
	IsHandle    int       `json:"is_handle"`     // 是否处理,0:未处理,1:已处理;默认:0
	ModifyTime  time.Time `json:"modify_time"`
	CreateTime  time.Time `json:"create_time"`
}

// GetEdbUpdateLogMaxId
// @Description: 获取最大的数据id
// @author: Roc
// @datetime 2024-03-07 18:38:23
// @param condition string
// @param pars []interface{}
// @return maxId int
// @return err error
func GetEdbUpdateLogMaxId() (maxId int64, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := ` SELECT id FROM edb_update_log WHERE 1=1 ORDER BY id desc limit 1 `
	err = o.Raw(sql).QueryRow(&maxId)

	return
}

// GetEdbUpdateLogMaxHandleId
// @Description: 获取已经操作了的最大的数据id
// @author: Roc
// @datetime 2024-03-08 17:53:29
// @return maxId int64
// @return err error
func GetEdbUpdateLogMaxHandleId() (maxId int64, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := ` SELECT id FROM edb_update_log WHERE 1=1 AND is_handle = 1 ORDER BY id desc limit 1 `
	err = o.Raw(sql).QueryRow(&maxId)

	return
}

// GetEdbUpdateLogByCondition
// @Description: 获取指标更新列表
// @author: Roc
// @datetime 2024-03-07 18:36:44
// @param condition string
// @param pars []interface{}
// @return item []*EdbUpdateLog
// @return err error
func GetEdbUpdateLogByCondition(condition string, pars []interface{}) (item []*EdbUpdateLog, err error) {
	o := orm.NewOrmUsingDB("data")
	sql := ` SELECT * FROM edb_update_log WHERE 1=1 `
	if condition != "" {
		sql += condition
	}
	sql += ` ORDER BY id ASC limit 500 `
	_, err = o.Raw(sql, pars).QueryRows(&item)

	return
}

// HandleUpdateLogByIds
// @Description: 批量处理指标更新记录
// @author: Roc
// @datetime 2024-03-08 17:30:52
// @param idList []int
// @return err error
func HandleUpdateLogByIds(idList []int64, modifyTime string) (err error) {
	num := len(idList)
	if num <= 0 {
		return
	}
	o := orm.NewOrmUsingDB("data")
	sql := ` UPDATE edb_update_log set is_handle=1 ,modify_time = ?  WHERE id in (` + utils.GetOrmInReplace(num) + `) `
	_, err = o.Raw(sql, modifyTime, idList).Exec()

	return
}

type EdbInfoItem struct {
	CalculateFormula string  `json:"calculate_formula"`
	Calendar         string  `json:"calendar"`
	ChartImage       string  `json:"chart_image"`
	ClassifyId       int     `json:"classify_id"`
	CreateTime       string  `json:"create_time"`
	DataDateType     string  `json:"data_date_type"`
	DataUpdateTime   string  `json:"data_update_time"`
	EdbCode          string  `json:"edb_code"`
	EdbInfoId        int     `json:"edb_info_id"`
	EdbInfoType      int     `json:"edb_info_type"`
	EdbName          string  `json:"edb_name"`
	EdbNameEn        string  `json:"edb_name_en"`
	EdbNameSource    string  `json:"edb_name_source"`
	EdbType          int     `json:"edb_type"`
	EmptyType        int     `json:"empty_type"`
	EndDate          string  `json:"end_date"`
	EndValue         float64 `json:"end_value"`
	ErDataUpdateDate string  `json:"er_data_update_date"`
	Extra            string  `json:"extra"`
	Frequency        string  `json:"frequency"`
	IndicatorCode    string  `json:"indicator_code"`
	IsUpdate         int     `json:"is_update"`
	LatestDate       string  `json:"latest_date"`
	LatestValue      float64 `json:"latest_value"`
	ManualSave       int     `json:"manual_save"`
	MaxEmptyType     int     `json:"max_empty_type"`
	MaxValue         float64 `json:"max_value"`
	MinValue         float64 `json:"min_value"`
	ModifyTime       string  `json:"modify_time"`
	MoveFrequency    string  `json:"move_frequency"`
	MoveType         int     `json:"move_type"`
	NoUpdate         int     `json:"no_update"`
	ServerUrl        string  `json:"server_url"`
	Sort             int     `json:"sort"`
	Source           int     `json:"source"`
	SourceIndexName  string  `json:"source_index_name"`
	SourceName       string  `json:"source_name"`
	StartDate        string  `json:"start_date"`
	StockCode        string  `json:"stock_code"`
	SubSource        int     `json:"sub_source"`
	SubSourceName    string  `json:"sub_source_name"`
	SysUserId        int     `json:"sys_user_id"`
	SysUserRealName  string  `json:"sys_user_real_name"`
	TerminalCode     string  `json:"terminal_code"`
	UniqueCode       string  `json:"unique_code"`
	Unit             string  `json:"unit"`
	UnitEn           string  `json:"unit_en"`
}

type EdbData struct {
	EdbDataId int32  `orm:"column(edb_data_id);pk" json:"edb_data_id"`
	EdbInfoId int32  `json:"edb_info_id"` // 指标id
	EdbCode   string `json:"edb_code"`    // 指标编码
	//DataTime      time.Time `json:"data_time"`      // 数据日期
	DataTime string  `json:"data_time"` // 数据日期
	Value    float64 `json:"value"`     // 数据值
	//CreateTime    time.Time `json:"create_time"`    // 创建时间
	//ModifyTime    time.Time `json:"modify_time"`    // 修改时间
	CreateTime    string `json:"create_time"`    // 创建时间
	ModifyTime    string `json:"modify_time"`    // 修改时间
	DataTimestamp int64  `json:"data_timestamp"` // 数据日期时间戳
}