package data_manage

import (
	"eta/eta_api/global"
	"eta/eta_api/utils"
	"fmt"
	"gorm.io/gorm"
	"time"

	"github.com/rdlucklib/rdluck_tools/paging"
)

type BaseFromTradeShanghaiIndex struct {
	BaseFromTradeShangHaiIndexId int `orm:"column(base_from_trade_shanghai_index_id);pk" gorm:"primaryKey"`
	Rank                         int
	DealShortName                string
	DealName                     string
	DealCode                     string
	DealValue                    string
	DealChange                   string
	BuyShortName                 string
	BuyName                      string
	BuyCode                      string
	BuyValue                     string
	BuyChange                    string
	SoldShortName                string
	SoldName                     string
	SoldCode                     string
	SoldValue                    string
	SoldChange                   string
	Frequency                    string
	ClassifyName                 string
	ClassifyType                 string
	CreateTime                   time.Time
	ModifyTime                   time.Time
	DataTime                     string
}
type BaseFromTradeCffexIndex struct {
	BaseFromTradeCffexIndexId int `orm:"column(base_from_trade_cffex_index_id);pk" gorm:"primaryKey"`
	Rank                      int
	DealShortName             string
	DealName                  string
	DealCode                  string
	DealValue                 string
	DealChange                string
	BuyShortName              string
	BuyName                   string
	BuyCode                   string
	BuyValue                  string
	BuyChange                 string
	SoldShortName             string
	SoldName                  string
	SoldCode                  string
	SoldValue                 string
	SoldChange                string
	Frequency                 string
	ClassifyName              string
	ClassifyType              string
	CreateTime                time.Time
	ModifyTime                time.Time
	DataTime                  string
}

type BaseFromTradeIneIndex struct {
	BaseFromTradeIneIndexId int `orm:"column(base_from_trade_ine_index_id);pk" gorm:"primaryKey"`
	Rank                    int
	DealShortName           string
	DealName                string
	DealCode                string
	DealValue               string
	DealChange              string
	BuyShortName            string
	BuyName                 string
	BuyCode                 string
	BuyValue                string
	BuyChange               string
	SoldShortName           string
	SoldName                string
	SoldCode                string
	SoldValue               string
	SoldChange              string
	Frequency               string
	ClassifyName            string
	ClassifyType            string
	CreateTime              time.Time
	ModifyTime              time.Time
	DataTime                string
}

type BaseFromTradeEicIndex struct {
	BaseFromEicIndexId     int `orm:"column(base_from_eic_index_id);pk" gorm:"primaryKey"`
	Country                string
	Type                   string
	EicCode                string
	ShortName              string
	Name                   string
	Status                 string
	GasDayStartedOn        string
	GasInStorage           string
	GasInStorageCode       string
	Full                   string
	FullCode               string
	Trend                  string
	TrendCode              string
	Injection              string
	InjectionCode          string
	Withdrawal             string
	WithdrawalCode         string
	WorkingGasVolume       string
	WorkingGasVolumeCode   string
	InjectionCapacity      string
	InjectionCapacityCode  string
	WithdrawalCapacity     string
	WithdrawalCapacityCode string
	Info                   string
	CreateTime             time.Time
	ModifyTime             time.Time
}

func GetBaseFromTradeIndexByParam(exchange, date, classifyName, classifyType string) (list []*BaseFromTradeShanghaiIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	if classifyName == "" {
		sql := "SELECT * FROM base_from_trade_" + exchange + "_index where data_time=?"
		err = o.Raw(sql, date).Find(&list).Error
		return
	} else if classifyType == "" {
		sql := "SELECT * FROM base_from_trade_" + exchange + "_index where data_time=? and classify_name=? ORDER BY classify_type,`rank`"
		err = o.Raw(sql, date, classifyName).Find(&list).Error
		return
	} else {
		sql := "SELECT * FROM base_from_trade_" + exchange + "_index where data_time=? and classify_name=? and classify_type=?"
		err = o.Raw(sql, date, classifyName, classifyType).Find(&list).Error
		return
	}
}

func GetExchangeClassify(exchange, dataTime string) (classifyName []string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT DISTINCT classify_name FROM base_from_trade_" + exchange + fmt.Sprintf("_index where data_time=? ORDER BY %s DESC", utils.GenerateQuerySql(utils.ConvertColumn, &utils.QueryParam{ConvertColumn: "classify_name"}))
	//sql := "SELECT DISTINCT classify_name FROM base_from_trade_" + exchange + "_index where data_time=? ORDER BY CONVERT(classify_name using gbk) DESC"
	err = o.Raw(sql, dataTime).Scan(&classifyName).Error
	return
}

func GetLatestDate(exchange string) (dataTime string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT data_time FROM base_from_trade_" + exchange + "_index ORDER BY data_time desc limit 1"
	err = o.Raw(sql).Scan(&dataTime).Error
	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
		dataTime = utils.GormDateStrToDateStr(dataTime)
	}
	return
}

func GetExchangeClassifyContract(exchange, Classify, dataTime string) (classifyName []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT DISTINCT classify_type FROM base_from_trade_" + exchange + "_index where classify_name=? and data_time=?"
	err = o.Raw(sql, Classify, dataTime).Scan(&classifyName).Error
	return
}

func GetContinentEicDate(date string) (data []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index where gas_day_started_on=? and type='continent' "
	err = o.Raw(sql, date).Find(&data).Error
	return
}

func GetCountryEicDate(date string) (data []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index where gas_day_started_on=? and type='country' "
	err = o.Raw(sql, date).Find(&data).Error
	return
}

func GetSSOEicDate(date, country string) (data []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index where gas_day_started_on=? and country=? and type='SSO' "
	err = o.Raw(sql, date, country).Find(&data).Error
	return
}

func GetStorageEicDate(date, country string) (data []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index where gas_day_started_on=? and country=? " +
		" and (type='Storage Facility' or type='Storage Group') "
	err = o.Raw(sql, date, country).Find(&data).Error
	return
}

func GetEicDate() (date []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index ORDER BY gas_day_started_on desc limit 1"
	err = o.Raw(sql).Find(&date).Error
	return
}

func GetEicHistoryDate(code string) (date []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index WHERE eic_code=? ORDER BY gas_day_started_on desc limit 30"
	err = o.Raw(sql, code).Find(&date).Error
	return
}

func GetEicHistoryDateByDate(code, startDate, endDate string) (date []*BaseFromTradeEicIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index WHERE eic_code=? and gas_day_started_on between ? and ? ORDER BY gas_day_started_on desc"
	err = o.Raw(sql, code, startDate, endDate).Find(&date).Error
	return
}

type BaseFromCoalmineJsmIndex struct {
	BaseFromCoalmineJsmIndexId int    `orm:"column(base_from_coalmine_jsm_index_id);pk" gorm:"primaryKey"`
	IndexName                  string `description:"持买单量指标名称"`
	IndexCode                  string `description:"持买单量指标编码"`
	Exchange                   string `description:"样本统计类别"`
	DealValue                  string `description:"成交量"`
	DataTime                   string `description:"数据日期"`
	Source                     string `description:"来源"`
	Province                   string `description:"省份"`
	Description                string `description:"描述"`
	Unit                       string `description:"单位"`
	Frequency                  string `description:"频率"`
	CreateTime                 string `description:"插入时间"`
	ModifyTime                 string `description:"修改时间"`
}

func (baseFromCoalmineJsmIndex *BaseFromCoalmineJsmIndex) AfterFind(tx *gorm.DB) (err error) {
	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
		if baseFromCoalmineJsmIndex.CreateTime != "" {
			baseFromCoalmineJsmIndex.CreateTime = utils.GormDateStrToDateTimeStr(baseFromCoalmineJsmIndex.CreateTime)
		}
		if baseFromCoalmineJsmIndex.ModifyTime != "" {
			baseFromCoalmineJsmIndex.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromCoalmineJsmIndex.ModifyTime)
		}
		if baseFromCoalmineJsmIndex.DataTime != "" {
			baseFromCoalmineJsmIndex.DataTime = utils.GormDateStrToDateStr(baseFromCoalmineJsmIndex.DataTime)
		}
	}
	return
}

// GetBaseFromCoalmineIndex 查询数据
func GetBaseFromCoalmineIndex(startDate, endDate string) (items []*BaseFromCoalmineJsmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_jsm_index WHERE data_time between ? and ? `
	err = o.Raw(sql, startDate, endDate).Find(&items).Error
	return
}

type BaseFromCoalmineCompanyIndex struct {
	BaseFromCoalmineCompanyIndexId int    `orm:"column(base_from_coalmine_company_index_id);pk" gorm:"primaryKey"`
	IndexName                      string `description:"持买单量指标名称"`
	IndexCode                      string `description:"持买单量指标编码"`
	DealValue                      string `description:"成交量"`
	DataTime                       string `description:"数据日期"`
	Source                         string `description:"来源"`
	Province                       string `description:"省份"`
	City                           string `description:"城市"`
	GroupName                      string `description:"集团名称"`
	Unit                           string `description:"单位"`
	Frequency                      string `description:"频率"`
	CreateTime                     string `description:"插入时间"`
	ModifyTime                     string `description:"修改时间"`
}

// GetBaseFromCoalmineCompanyIndex 查询公司指标
func GetBaseFromCoalmineCompanyIndex(startDate, endDate string) (items []*BaseFromCoalmineCompanyIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_company_index WHERE data_time between ? and ? `
	err = o.Raw(sql, startDate, endDate).Find(&items).Error
	return
}

// BaseFromCoalmineFirmIndex 煤矿产量周度公司数据表
type BaseFromCoalmineFirmIndex struct {
	BaseFromCoalmineFirmIndexID int    `orm:"column(base_from_coalmine_firm_index_id);pk" gorm:"primaryKey"`
	IndexName                   string // 省份/企业名称
	IndexCode                   string // 持买单量指标编码
	DataTime                    string // 指标时间
	DealValue                   string // 数据量
	GroupName                   string // 集团名
	Source                      string // 来源
	Unit                        string // 来源
	Frequency                   string `description:"频率"`
	CreateTime                  string `description:"插入时间"`
	ModifyTime                  string `description:"修改时间"`
}

// 查询指标
func GetBaseFromCoalmineFirmIndex(dataTime string) (items []*BaseFromCoalmineFirmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_firm_index WHERE data_time LIKE  `
	sql = sql + "'" + dataTime + "%" + "'"
	err = o.Raw(sql).Find(&items).Error
	fmt.Println(sql)
	return
}

// BaseFromCoalmineCoastalIndex 沿海八省动力煤用户供耗存数据指标表
type BaseFromCoalmineCoastalIndex struct {
	BaseFromCoalmineCoastalIndexID int    `orm:"column(base_from_coalmine_coastal_index_id);pk" gorm:"primaryKey"`
	IndexName                      string // 省份/企业名称
	IndexCode                      string // 持买单量指标编码
	DataTime                       string // 指标时间
	DealValue                      string // 数据量
	GroupName                      string // 地区
	Source                         string // 来源
	Unit                           string //单位
	Frequency                      string `description:"频率"`
	CreateTime                     string `description:"插入时间"`
	ModifyTime                     string `description:"修改时间"`
}

func (baseFromCoalmineCoastalIndex *BaseFromCoalmineCoastalIndex) AfterFind(tx *gorm.DB) (err error) {
	if utils.NeedDateOrTimeFormat(utils.DbDriverName) {
		if baseFromCoalmineCoastalIndex.CreateTime != "" {
			baseFromCoalmineCoastalIndex.CreateTime = utils.GormDateStrToDateTimeStr(baseFromCoalmineCoastalIndex.CreateTime)
		}
		if baseFromCoalmineCoastalIndex.ModifyTime != "" {
			baseFromCoalmineCoastalIndex.ModifyTime = utils.GormDateStrToDateTimeStr(baseFromCoalmineCoastalIndex.ModifyTime)
		}
		if baseFromCoalmineCoastalIndex.DataTime != "" {
			baseFromCoalmineCoastalIndex.DataTime = utils.GormDateStrToDateStr(baseFromCoalmineCoastalIndex.DataTime)
		}
	}
	return
}

// 查询指标
func GetBaseFromCoalmineCoastalIndex(startDate, endDate string) (items []*BaseFromCoalmineCoastalIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_coastal_index WHERE data_time between ? and ? `
	err = o.Raw(sql, startDate, endDate).Find(&items).Error
	return
}

// BaseFromCoalmineInlandIndex 内陆动力煤用户供耗存数据指标表
type BaseFromCoalmineInlandIndex struct {
	BaseFromCoalmineInlandIndexID int    `orm:"column(base_from_coalmine_inland_index_id);pk" gorm:"primaryKey"`
	IndexName                     string // 省份/企业名称
	IndexCode                     string // 持买单量指标编码
	DataTime                      string // 指标时间
	DealValue                     string // 数据量
	GroupName                     string // 地区
	Source                        string // 来源
	Unit                          string // 来源
	Frequency                     string `description:"频率"`
	CreateTime                    string `description:"插入时间"`
	ModifyTime                    string `description:"修改时间"`
}

// 查询指标
func GetBaseFromCoalmineInlandIndex(startDate, endDate string) (items []*BaseFromCoalmineInlandIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_inland_index WHERE data_time between ? and ? `
	err = o.Raw(sql, startDate, endDate).Find(&items).Error
	return
}

type BaseFromCoalmineClassifyItem struct {
	ClassifyId   int
	ClassifyName string
	Child        []CoalChild
}

type CoalChild struct {
	ClassifyId   int
	ClassifyName string
}

type CoalmineDataResp struct {
	IndexName  string
	IndexCode  string // 持买单量指标编码
	Unit       string // 来源
	Frequency  string
	ModifyTime string
	DataList   []DataList
}

type CoalmineDataPageResp struct {
	IndexName  string
	IndexCode  string // 持买单量指标编码
	Unit       string // 来源
	Frequency  string
	ModifyTime string
	Paging     *paging.PagingItem `description:"分页数据" gorm:"-"`
	DataList   []DataList         `gorm:"-"`
}

type CoalmineSingalDataResp struct {
	IndexName  string
	IndexCode  string // 持买单量指标编码
	Unit       string // 来源
	GroupId    int    // 二级id
	GroupName  string // 二级名称
	Frequency  string
	ModifyTime string
	ClassifyId int
	DataList   []DataList
}

type DataList struct {
	Value    string
	DataTime string
}

type FrequencyResp struct {
	Frequency int
}

// GetFrequencyFromCoal 获取指标信息
func GetFrequencyFromCoal(suffix string) (list *string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT frequency FROM base_from_coalmine_%s `
	sql = fmt.Sprintf(sql, suffix)
	err = o.Raw(sql).Scan(&list).Error
	return
}

// 查询数据
func GetBaseFromCoalmineIndexByFrequency(frequency, groupName string) (items []*BaseFromCoalmineJsmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_jsm_index WHERE frequency=? AND province=?`
	err = o.Raw(sql, frequency, groupName).Find(&items).Error
	return
}

// 查询数据
func GetGroupNameFromCoalmineIndex(suffix string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT group_name FROM base_from_coalmine_%s `
	sql = fmt.Sprintf(sql, suffix)
	err = o.Raw(sql).Find(&items).Error
	return
}

// 查询数据
func GetProvinceFromCoalmineIndex(suffix string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT province FROM base_from_coalmine_%s `
	sql = fmt.Sprintf(sql, suffix)
	err = o.Raw(sql).Find(&items).Error
	return
}

// 查询数据
func GetClassifyCoalmineIndexByGroupName(groupName string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT index_code FROM base_from_coalmine_jsm_index WHERE province=? `
	err = o.Raw(sql, groupName).Find(&items).Error
	return
}

// 查询数据
func GetPageFromCoalmineIndexByFrequency(frequency, classify string, startSize, pageSize int) (items []*BaseFromCoalmineJsmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_jsm_index WHERE frequency=? AND index_code=? ORDER BY data_time DESC LIMIT ?,?  `
	err = o.Raw(sql, frequency, classify, startSize, pageSize).Find(&items).Error
	return
}

// 查询数据
func GetCountFromJsm(indexCode string) (item int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT COUNT(1) FROM base_from_coalmine_jsm_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).First(&item).Error
	return
}

func GetClassifyCompanyByGroupName(groupName string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT index_code FROM base_from_coalmine_company_index WHERE group_name=? `
	err = o.Raw(sql, groupName).Find(&items).Error
	return
}

func GetClassifyJsmByGroupName(groupName string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT index_code FROM base_from_coalmine_jsm_index WHERE province=? `
	err = o.Raw(sql, groupName).Find(&items).Error
	return
}

// 查询公司指标
func GetPageFromCoalmineCompanyIndexByFrequency(frequency, classify string, startSize, pageSize int) (items []*BaseFromCoalmineCompanyIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_company_index WHERE frequency=? AND index_code=? ORDER BY data_time DESC LIMIT ?,? `
	err = o.Raw(sql, frequency, classify, startSize, pageSize).Find(&items).Error
	return
}

func GetCountFromCompany(indexCode string) (item int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT COUNT(1) FROM base_from_coalmine_company_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).First(&item).Error
	return
}

func GetCountFromFirm(indexCode string) (item int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT COUNT(1) FROM base_from_coalmine_firm_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).First(&item).Error
	return
}

func GetClassifyFirmByGroupName(groupName string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT index_code FROM base_from_coalmine_firm_index WHERE group_name=? `
	err = o.Raw(sql, groupName).Find(&items).Error
	return
}

// 查询指标
func GetPageFromCoalmineFirmIndexByFrequency(frequency, classify string, startSize, pageSize int) (items []*BaseFromCoalmineFirmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_firm_index WHERE frequency=? AND index_code=? ORDER BY data_time DESC LIMIT ?,?  `
	err = o.Raw(sql, frequency, classify, startSize, pageSize).Find(&items).Error
	return
}

func GetCountFromCoastal(indexCode string) (item int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT COUNT(1) FROM base_from_coalmine_coastal_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).First(&item).Error
	return
}

func GetClassifyCoastalByGroupName(groupName string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT index_code FROM base_from_coalmine_coastal_index WHERE group_name=? `
	err = o.Raw(sql, groupName).Find(&items).Error
	return
}

// 查询指标
func GetPageFromCoalmineCoastalIndexByFrequency(frequency, classify string, startSize, pageSize int) (items []*BaseFromCoalmineCoastalIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_coastal_index WHERE frequency=? AND index_code=? ORDER BY data_time DESC LIMIT ?,? `
	err = o.Raw(sql, frequency, classify, startSize, pageSize).Find(&items).Error
	return
}

func GetCountFromInland(indexCode string) (item int, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT COUNT(1) FROM base_from_coalmine_inland_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).First(&item).Error
	return
}

func GetClassifyInlandByGroupName(groupName string) (items []*string, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT DISTINCT index_code FROM base_from_coalmine_inland_index WHERE group_name=? `
	err = o.Raw(sql, groupName).Find(&items).Error
	return
}

// 查询指标
func GetPageFromCoalmineInlandIndexByFrequency(frequency, classify string, startSize, pageSize int) (items []*BaseFromCoalmineInlandIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_inland_index WHERE frequency=? AND index_code=? ORDER BY data_time DESC LIMIT ?,? `
	err = o.Raw(sql, frequency, classify, startSize, pageSize).Find(&items).Error
	return
}

// 查询公司指标
func GetBaseFromCoalmineCompanyIndexByFrequency(frequency, groupName string) (items []*BaseFromCoalmineCompanyIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_company_index WHERE frequency=? AND group_name=? `
	err = o.Raw(sql, frequency, groupName).Find(&items).Error
	return
}

// 查询指标
func GetBaseFromCoalmineFirmIndexByFrequency(frequency, groupName string) (items []*BaseFromCoalmineFirmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_firm_index WHERE frequency=? AND group_name=? `
	err = o.Raw(sql, frequency, groupName).Find(&items).Error
	return
}

// 查询指标
func GetBaseFromCoalmineCoastalIndexByFrequency(frequency, groupName string) (items []*BaseFromCoalmineCoastalIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_coastal_index WHERE frequency=? AND group_name=? `
	err = o.Raw(sql, frequency, groupName).Find(&items).Error
	return
}

// 查询指标
func GetBaseFromCoalmineInlandIndexByFrequency(frequency, groupName string) (items []*BaseFromCoalmineInlandIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_inland_index WHERE frequency=? AND group_name=? `
	err = o.Raw(sql, frequency, groupName).Find(&items).Error
	return
}

// 查询数据
func GetBaseFromCoalmineIndexByCode(indexCode string) (items []*BaseFromCoalmineJsmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_jsm_index WHERE index_code=?`
	err = o.Raw(sql, indexCode).Find(&items).Error
	return
}

// 查询公司指标
func GetBaseFromCoalmineCompanyIndexByCode(indexCode string) (items []*BaseFromCoalmineCompanyIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_company_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).Find(&items).Error
	return
}

// 查询指标
func GetBaseFromCoalmineFirmIndexByCode(indexCode string) (items []*BaseFromCoalmineFirmIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_firm_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).Find(&items).Error
	return
}

// 查询指标
func GetBaseFromCoalmineCoastalIndexByCode(indexCode string) (items []*BaseFromCoalmineCoastalIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_coastal_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).Find(&items).Error
	return
}

// 查询指标
func GetBaseFromCoalmineInlandIndexByCode(indexCode string) (items []*BaseFromCoalmineInlandIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := `SELECT * FROM base_from_coalmine_inland_index WHERE index_code=? `
	err = o.Raw(sql, indexCode).Find(&items).Error
	return
}

type BaseFromTradeEicIndexV2 struct {
	BaseFromEicIndexId     int `orm:"column(base_from_eic_index_id);pk" gorm:"primaryKey"`
	Type                   string
	EicCode                string
	Name                   string
	Status                 string
	GasDayStart            string
	GasInStorage           float64
	GasInStorageCode       string
	Consumption            string
	ConsumptionCode        string
	ConsumptionFull        string
	ConsumptionFullCode    string
	Full                   float64
	FullCode               string
	Trend                  float64
	TrendCode              string
	Injection              float64
	InjectionCode          string
	Withdrawal             float64
	WithdrawalCode         string
	WorkingGasVolume       float64
	WorkingGasVolumeCode   string
	InjectionCapacity      float64
	InjectionCapacityCode  string
	WithdrawalCapacity     float64
	WithdrawalCapacityCode string
	Info                   string
	Parent                 string
	CreateTime             time.Time
	ModifyTime             time.Time
	Children               []BaseFromTradeEicIndexV2 `gorm:"-"`
}

func GetEicDateV2() (date []*BaseFromTradeEicIndexV2, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index_v2 ORDER BY gas_day_start desc limit 1"
	err = o.Raw(sql).Find(&date).Error
	return
}

func GetEicDataV2(date string) (data []*BaseFromTradeEicIndexV2, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index_v2 where gas_day_start=? "
	err = o.Raw(sql, date).Find(&data).Error
	return
}

func GetEicHistoryDateByDateV2(code, startDate, endDate string) (date []*BaseFromTradeEicIndexV2, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index_v2 WHERE eic_code=? and gas_day_start between ? and ? ORDER BY gas_day_start desc"
	err = o.Raw(sql, code, startDate, endDate).Find(&date).Error
	return
}

func GetEicHistoryDateV2(code string) (date []*BaseFromTradeEicIndexV2, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index_v2 WHERE eic_code=? ORDER BY gas_day_start desc limit 30"
	err = o.Raw(sql, code).Find(&date).Error
	return
}

func GetContinentAndCountryEicDateV2(date string) (data []*BaseFromTradeEicIndexV2, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index_v2 where gas_day_start=? and (type='continent' OR type='country') "
	err = o.Raw(sql, date).Find(&data).Error
	return
}

func GetSSOAndFacEicDateV2(date, name string) (data []*BaseFromTradeEicIndexV2, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_eic_index_v2 where gas_day_start=? and (type='sso' OR type='fac') "
	err = o.Raw(sql, date).Find(&data).Error
	return
}

func GetBaseFromTradeIndexByDate(exchange, startDate, endDate string) (list []*BaseFromTradeShanghaiIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_" + exchange + "_index where `rank` < 50 and data_time between ? and ? order by data_time asc"
	err = o.Raw(sql, startDate, endDate).Find(&list).Error
	return
}

func GetFirstBaseFromTradeIndexByDate(exchange string) (item *BaseFromTradeShanghaiIndex, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_trade_" + exchange + "_index where `rank` < 50 order by data_time asc"
	err = o.Raw(sql).First(&item).Error
	return
}

type BaseFromCoalmineClassify struct {
	BaseFromCoalmineClassifyId int    `orm:"column(base_from_coalmine_classify_id);pk" gorm:"primaryKey"`
	ClassifyName               string // 分类名称
	Suffix                     string // 表名后缀
	CreateTime                 time.Time
}

func GetCoalmineClassifyList() (list []*BaseFromCoalmineClassify, err error) {
	o := global.DbMap[utils.DbNameIndex]
	sql := "SELECT * FROM base_from_coalmine_classify"
	err = o.Raw(sql).Find(&list).Error
	return
}