package controllers

import (
	"fmt"
	"github.com/rdlucklib/rdluck_tools/paging"
	"github.com/tealeg/xlsx"
	"eta/eta_api/models"
	"eta/eta_api/models/data_manage"
	"eta/eta_api/utils"
	"os"
	"path/filepath"
	"strconv"
	"strings"
	"time"
)

type TradeCommonController struct {
	BaseCommonController
}
type Data []struct {
	Title    string
	ItemList []ShanghaiList
}
type ShanghaiList struct {
	Code string
	Item []*data_manage.BaseFromTradeShanghaiIndex
}
type EicData struct {
	Country                string
	Type                   string
	EicCode                string
	ShortName              string
	Name                   string
	Status                 string
	GasDayStartedOn        string
	GasInStorage           float64
	GasInStorageCode       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
	Children               []*data_manage.BaseFromTradeEicIndex
}

// ExchangeClassify
// @title	获取交易所种类列表
// @Description	获取交易所种类列表接口
// @Param	Exchange query string true	"交易所名称"
// @Success 200 {object} models.
// @router /data/exchange/classify [get]
func (this *TradeCommonController) ExchangeClassify() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	exchange := this.GetString("Exchange")

	var respItem [][]*string

	latestData, err := data_manage.GetLatestDate(exchange)
	if err != nil {
		br.Msg = "获取失败"
		return
	}
	if len(latestData) <= 0 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = respItem
		return
	}

	var dataTime []*string
	if latestData != nil {
		dataTime = append(dataTime, &latestData[0].DataTime)
	}
	classifyName, err := data_manage.GetExchangeClassify(exchange, *dataTime[0])
	if err != nil {
		br.Msg = "获取种类失败"
		br.ErrMsg = "获取种类失败,Err:" + err.Error()
		return
	}
	respItem = append(respItem, classifyName)
	respItem = append(respItem, dataTime)
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = respItem
}

// ExchangeClassifyContract
// @title	获取交易所种类合约列表
// @Description	获取交易所种类合约列表接口
// @Param	Exchange query string true	"交易所名称"
// @Param	Classify query string true	"种类名称"
// @Param	DataTime query string true	"时间"
// @Success 200 {object} models.
// @router /data/exchange/classifyContract [get]
func (this *TradeCommonController) ExchangeClassifyContract() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	exchange := this.GetString("Exchange")
	classify := this.GetString("Classify")
	dataTime := this.GetString("DataTime")
	classifyName, err := data_manage.GetExchangeClassifyContract(exchange, classify, dataTime)
	if err != nil {
		br.Msg = "获取种类失败"
		br.ErrMsg = "获取种类失败,Err:" + err.Error()
		return
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = classifyName
}

// ShfeDataList
// @title	获取上期所列表
// @Description	获取上期所列表接口
// @Param	Date query string true	"查询日期"
// @Param	ClassifyName query string false	"分类名称"
// @Param	ClassifyType query string false	"分类合约"
// @Success 200 {object} models.
// @router /data/shfe [get]
func (this *TradeCommonController) ShfeDataList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	classifyName := this.GetString("ClassifyName")
	classifyType := this.GetString("ClassifyType")
	frequencyList, err := data_manage.GetBaseFromTradeIndexByParam("shanghai", date, classifyName, classifyType)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	var data Data
	var j, k int
	if len(frequencyList) == 0 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = data
	} else {
		if classifyName == "" {
			data = make(Data, 50)
			for i, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				if data[j].Title == item.ClassifyName {
					if data[j].ItemList[k].Code == item.ClassifyType {
						data[j].ItemList[k].Item = append(data[j].ItemList[k].Item, item)
						continue
					}
					if i > 0 {
						k++
					}
					data[j].ItemList[k].Code = item.ClassifyType
					data[j].ItemList[k].Item = append(data[j].ItemList[k].Item, item)
					continue
				}
				if i != 0 {
					if k == 0 {
						data[j].ItemList = data[j].ItemList[:k+1]
					} else {
						data[j].ItemList = data[j].ItemList[:k]
					}
					j++
					k = 0
				}
				if data[j].ItemList == nil {
					list := make([]ShanghaiList, 930)
					data[j].ItemList = list
				}
				data[j].Title = item.ClassifyName
				data[j].ItemList[k].Code = item.ClassifyType
				data[j].ItemList[k].Item = append(data[j].ItemList[k].Item, item)
			}
			data = data[:j]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		} else {
			data = make(Data, 1)
			for i, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = classifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 200)
					data[0].ItemList = list
				}
				if data[0].ItemList[k].Code == item.ClassifyType {
					data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
					continue
				}
				if i > 0 {
					k++
				}
				data[0].ItemList[k].Code = item.ClassifyType
				data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
			}
			data[0].ItemList = data[0].ItemList[:k+1]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		}
	}
}

// IneDataList
// @title	获取上海国际能源交易所列表
// @Description	获取上海国际能源交易所列表接口
// @Param	Date query string true	"查询日期"
// @Param	ClassifyName query string false	"分类名称"
// @Param	ClassifyType query string false	"分类合约"
// @Success 200 {object} models.
// @router /data/ine [get]
func (this *TradeCommonController) IneDataList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	classifyName := this.GetString("ClassifyName")
	classifyType := this.GetString("ClassifyType")
	frequencyList, err := data_manage.GetBaseFromTradeIndexByParam("ine", date, classifyName, classifyType)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}

	var data Data
	var k int
	if len(frequencyList) == 0 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = data
	} else {
		data = make(Data, 1)
		if len(frequencyList) > 20 {
			for i, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = classifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 200)
					data[0].ItemList = list
				}
				if data[0].ItemList[k].Code == item.ClassifyType {
					data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
					continue
				}
				if i > 0 {
					k++
				}
				data[0].ItemList[k].Code = item.ClassifyType
				data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
			}
			data[0].ItemList = data[0].ItemList[:k+1]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		} else {
			for _, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = item.ClassifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 1)
					data[0].ItemList = list
				}
				if data[0].ItemList[0].Code == item.ClassifyType {
					data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
					continue
				}
				//if i != 0 {
				//	k++
				//	fmt.Println(k)
				//}
				data[0].ItemList[0].Code = item.ClassifyType
				data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
			}
			//data[0].ItemList = data[0].ItemList[:k]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		}
	}
}

// CffexDataList
// @title	获取中金所所列表
// @Description	获取中金所列表接口
// @Param	Date query string true	"查询日期"
// @Param	ClassifyName query string false	"分类名称"
// @Param	ClassifyType query string false	"分类合约"
// @Success 200 {object} models.
// @router /data/cffex [get]
func (this *TradeCommonController) CffexDataList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	date = strings.Replace(date, "-", "", -1)
	classifyName := this.GetString("ClassifyName")
	classifyType := this.GetString("ClassifyType")
	frequencyList, err := data_manage.GetBaseFromTradeIndexByParam("cffex", date, classifyName, classifyType)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	var data Data
	var k int
	if len(frequencyList) == 0 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = data
	} else {
		data = make(Data, 1)
		if len(frequencyList) > 20 {
			for i, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = classifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 200)
					data[0].ItemList = list
				}
				if data[0].ItemList[k].Code == item.ClassifyType {
					data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
					continue
				}
				if i > 0 {
					k++
				}
				data[0].ItemList[k].Code = item.ClassifyType
				data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
			}
			data[0].ItemList = data[0].ItemList[:k+1]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		} else {
			for _, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = item.ClassifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 1)
					data[0].ItemList = list
				}
				if data[0].ItemList[0].Code == item.ClassifyType {
					data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
					continue
				}
				//if i != 0 {
				//	k++
				//	fmt.Println(k)
				//}
				data[0].ItemList[0].Code = item.ClassifyType
				data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
			}
			//data[0].ItemList = data[0].ItemList[:20]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		}
	}
}

// ZhengzhouDataList
// @title	获取郑州交易所列表
// @Description	获取郑州交易所列表接口
// @Param	Date query string true	"查询日期"
// @Param	ClassifyName query string false	"分类名称"
// @Param	ClassifyType query string false	"分类合约"
// @Success 200 {object} models.
// @router /data/zhengzhou [get]
func (this *TradeCommonController) ZhengzhouDataList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	fmt.Println(date)
	date = strings.Replace(date, "-", "", -1)
	fmt.Println(date)
	classifyName := this.GetString("ClassifyName")
	classifyType := this.GetString("ClassifyType")
	frequencyList, err := data_manage.GetBaseFromTradeIndexByParam("zhengzhou", date, classifyName, classifyType)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	var data Data
	var k int
	if len(frequencyList) == 0 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = data
	} else {
		data = make(Data, 1)
		fmt.Println(len(frequencyList))
		if len(frequencyList) > 21 {
			for i, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = classifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 200)
					data[0].ItemList = list
				}
				if data[0].ItemList[k].Code == item.ClassifyType {
					data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
					continue
				}
				if i > 0 {
					k++
				}
				data[0].ItemList[k].Code = item.ClassifyType
				data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
			}
			data[0].ItemList = data[0].ItemList[:k]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		} else {
			for _, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = item.ClassifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 1)
					data[0].ItemList = list
				}
				if data[0].ItemList[0].Code == item.ClassifyType {
					data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
					continue
				}
				//if i != 0 {
				//	k++
				//	fmt.Println(k)
				//}
				data[0].ItemList[0].Code = item.ClassifyType
				data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
			}
			//data[0].ItemList = data[0].ItemList[:k]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		}
	}
}

// DalianDataList
// @title	获取大连交易所列表
// @Description	获取大连交易所列表接口
// @Param	Date query string true	"查询日期"
// @Param	ClassifyName query string false	"分类名称"
// @Param	ClassifyType query string false	"分类合约"
// @Success 200 {object} models.
// @router /data/dalian [get]
func (this *TradeCommonController) DalianDataList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	classifyName := this.GetString("ClassifyName")
	classifyType := this.GetString("ClassifyType")
	frequencyList, err := data_manage.GetBaseFromTradeIndexByParam("dalian", date, classifyName, classifyType)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	var data Data
	var k int
	if len(frequencyList) == 0 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = data
	} else {
		data = make(Data, 1)
		fmt.Println("len:", len(frequencyList))
		if len(frequencyList) > 21 {
			for i, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = classifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 200)
					data[0].ItemList = list
				}
				if data[0].ItemList[k].Code == item.ClassifyType {
					data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
					continue
				}
				if i > 0 {
					k++
				}
				data[0].ItemList[k].Code = item.ClassifyType
				data[0].ItemList[k].Item = append(data[0].ItemList[k].Item, item)
			}
			data[0].ItemList = data[0].ItemList[:k]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		} else {
			for _, item := range frequencyList {
				if item.DealCode == "" {
					item.DealValue = ""
					item.DealChange = ""
				}
				if item.BuyCode == "" {
					item.BuyValue = ""
					item.BuyChange = ""
				}
				if item.SoldCode == "" {
					item.SoldValue = ""
					item.SoldChange = ""
				}
				data[0].Title = item.ClassifyName
				if data[0].ItemList == nil {
					list := make([]ShanghaiList, 1)
					data[0].ItemList = list
				}
				if data[0].ItemList[0].Code == item.ClassifyType {
					data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
					continue
				}
				//if i != 0 {
				//	k++
				//	fmt.Println(k)
				//}
				data[0].ItemList[0].Code = item.ClassifyType
				data[0].ItemList[0].Item = append(data[0].ItemList[0].Item, item)
			}
			//data[0].ItemList = data[0].ItemList[:k]

			br.Ret = 200
			br.Success = true
			br.Msg = "获取成功"
			br.Data = data
		}
	}
}

// EicLatestDate
// @title	获取欧洲天然气最新日期
// @Description	获取欧洲天然气最新日期接口
// @Success 200 {object} models.
// @router /data/eicLatestDate [get]
func (this *TradeCommonController) EicLatestDate() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	latestData, err := data_manage.GetEicDate()
	if err != nil {
		br.Msg = "获取日期失败"
		br.ErrMsg = "获取日期失败,Err:" + err.Error()
		return
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = latestData[0].GasDayStartedOn
}

// EicContinentList 欧洲天然气洲际及国家级列表
// @title	获取欧洲天然气列表
// @Description	获取欧洲天然气列表接口
// @Param	Date query string true	"查询日期"
// @Success 200 {object} models.
// @router /data/eicContinent [get]
func (this *TradeCommonController) EicContinentList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	continentList, err := data_manage.GetContinentEicDate(date)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	countryList, err := data_manage.GetCountryEicDate(date)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	if len(countryList) == 0 || len(continentList) < 1 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = []EicData{}
	} else {
		countryLen := len(countryList)
		var euData = EicData{
			Country:                "eu",
			Type:                   "continent",
			EicCode:                "eu",
			ShortName:              "eu",
			Name:                   "eu",
			Status:                 "N",
			GasDayStartedOn:        "",
			GasInStorage:           0,
			GasInStorageCode:       "euGS",
			Full:                   0,
			FullCode:               "euF",
			Trend:                  0,
			TrendCode:              "euT",
			Injection:              0,
			InjectionCode:          "euIn",
			Withdrawal:             0,
			WithdrawalCode:         "euOut",
			WorkingGasVolume:       0,
			WorkingGasVolumeCode:   "euWGV",
			InjectionCapacity:      0,
			InjectionCapacityCode:  "euIC",
			WithdrawalCapacity:     0,
			WithdrawalCapacityCode: "euWC",
			Info:                   "",
			Children:               countryList[:countryLen-2],
		}
		var neData = EicData{
			Country:                "ne",
			Type:                   "continent",
			EicCode:                "ne",
			ShortName:              "ne",
			Name:                   "ne",
			Status:                 "N",
			GasDayStartedOn:        "",
			GasInStorage:           0,
			GasInStorageCode:       "neGS",
			Full:                   0,
			FullCode:               "neF",
			Trend:                  0,
			TrendCode:              "neT",
			Injection:              0,
			InjectionCode:          "neIn",
			Withdrawal:             0,
			WithdrawalCode:         "neOut",
			WorkingGasVolume:       0,
			WorkingGasVolumeCode:   "neWGV",
			InjectionCapacity:      0,
			InjectionCapacityCode:  "neIC",
			WithdrawalCapacity:     0,
			WithdrawalCapacityCode: "neWC",
			Info:                   "",
			Children:               countryList[countryLen-2:],
		}
		//如果洲际数据正常
		if continentList[0].Country == "eu" {
			gasInStorage, _ := strconv.ParseFloat(continentList[0].GasInStorage, 64)
			full, _ := strconv.ParseFloat(continentList[0].Full, 64)
			trend, _ := strconv.ParseFloat(continentList[0].Trend, 64)
			injection, _ := strconv.ParseFloat(continentList[0].Injection, 64)
			withdrawal, _ := strconv.ParseFloat(continentList[0].Withdrawal, 64)
			workingGasVolume, _ := strconv.ParseFloat(continentList[0].WorkingGasVolume, 64)
			injectionCapacity, _ := strconv.ParseFloat(continentList[0].InjectionCapacity, 64)
			withdrawalCapacity, _ := strconv.ParseFloat(continentList[0].WithdrawalCapacity, 64)
			euData = EicData{
				continentList[0].Country,
				continentList[0].Type,
				continentList[0].EicCode,
				continentList[0].ShortName,
				continentList[0].Name,
				continentList[0].Status,
				continentList[0].GasDayStartedOn,
				gasInStorage,
				continentList[0].GasInStorageCode,
				full,
				continentList[0].FullCode,
				trend,
				continentList[0].TrendCode,
				injection,
				continentList[0].InjectionCode,
				withdrawal,
				continentList[0].WithdrawalCode,
				workingGasVolume,
				continentList[0].WorkingGasVolumeCode,
				injectionCapacity,
				continentList[0].InjectionCapacityCode,
				withdrawalCapacity,
				continentList[0].WithdrawalCapacityCode,
				continentList[0].Info,
				countryList[:countryLen-2],
			}
			if len(continentList) > 1 {
				gasInStorage1, _ := strconv.ParseFloat(continentList[1].GasInStorage, 64)
				full1, _ := strconv.ParseFloat(continentList[1].Full, 64)
				trend1, _ := strconv.ParseFloat(continentList[1].Trend, 64)
				injection1, _ := strconv.ParseFloat(continentList[1].Injection, 64)
				withdrawal1, _ := strconv.ParseFloat(continentList[1].Withdrawal, 64)
				workingGasVolume1, _ := strconv.ParseFloat(continentList[1].WorkingGasVolume, 64)
				injectionCapacity1, _ := strconv.ParseFloat(continentList[1].InjectionCapacity, 64)
				withdrawalCapacity1, _ := strconv.ParseFloat(continentList[1].WithdrawalCapacity, 64)
				neData = EicData{
					continentList[1].Country,
					continentList[1].Type,
					continentList[1].EicCode,
					continentList[1].ShortName,
					continentList[1].Name,
					continentList[1].Status,
					continentList[1].GasDayStartedOn,
					gasInStorage1,
					continentList[1].GasInStorageCode,
					full1,
					continentList[1].FullCode,
					trend1,
					continentList[1].TrendCode,
					injection1,
					continentList[1].InjectionCode,
					withdrawal1,
					continentList[1].WithdrawalCode,
					workingGasVolume1,
					continentList[1].WorkingGasVolumeCode,
					injectionCapacity1,
					continentList[1].InjectionCapacityCode,
					withdrawalCapacity1,
					continentList[1].WithdrawalCapacityCode,
					continentList[1].Info,
					countryList[countryLen-2:],
				}
			}
		} else {
			//数据不正常，只有一个洲际数据时
			if continentList[0].Country == "eu" {
				gasInStorage, _ := strconv.ParseFloat(continentList[0].GasInStorage, 64)
				full, _ := strconv.ParseFloat(continentList[0].Full, 64)
				trend, _ := strconv.ParseFloat(continentList[0].Trend, 64)
				injection, _ := strconv.ParseFloat(continentList[0].Injection, 64)
				withdrawal, _ := strconv.ParseFloat(continentList[0].Withdrawal, 64)
				workingGasVolume, _ := strconv.ParseFloat(continentList[0].WorkingGasVolume, 64)
				injectionCapacity, _ := strconv.ParseFloat(continentList[0].InjectionCapacity, 64)
				withdrawalCapacity, _ := strconv.ParseFloat(continentList[0].WithdrawalCapacity, 64)
				euData = EicData{
					continentList[0].Country,
					continentList[0].Type,
					continentList[0].EicCode,
					continentList[0].ShortName,
					continentList[0].Name,
					continentList[0].Status,
					continentList[0].GasDayStartedOn,
					gasInStorage,
					continentList[0].GasInStorageCode,
					full,
					continentList[0].FullCode,
					trend,
					continentList[0].TrendCode,
					injection,
					continentList[0].InjectionCode,
					withdrawal,
					continentList[0].WithdrawalCode,
					workingGasVolume,
					continentList[0].WorkingGasVolumeCode,
					injectionCapacity,
					continentList[0].InjectionCapacityCode,
					withdrawalCapacity,
					continentList[0].WithdrawalCapacityCode,
					continentList[0].Info,
					countryList[:countryLen-2],
				}
			} else {
				gasInStorage1, _ := strconv.ParseFloat(continentList[0].GasInStorage, 64)
				full1, _ := strconv.ParseFloat(continentList[0].Full, 64)
				trend1, _ := strconv.ParseFloat(continentList[0].Trend, 64)
				injection1, _ := strconv.ParseFloat(continentList[0].Injection, 64)
				withdrawal1, _ := strconv.ParseFloat(continentList[0].Withdrawal, 64)
				workingGasVolume1, _ := strconv.ParseFloat(continentList[0].WorkingGasVolume, 64)
				injectionCapacity1, _ := strconv.ParseFloat(continentList[0].InjectionCapacity, 64)
				withdrawalCapacity1, _ := strconv.ParseFloat(continentList[0].WithdrawalCapacity, 64)
				neData = EicData{
					continentList[0].Country,
					continentList[0].Type,
					continentList[0].EicCode,
					continentList[0].ShortName,
					continentList[0].Name,
					continentList[0].Status,
					continentList[0].GasDayStartedOn,
					gasInStorage1,
					continentList[0].GasInStorageCode,
					full1,
					continentList[0].FullCode,
					trend1,
					continentList[0].TrendCode,
					injection1,
					continentList[0].InjectionCode,
					withdrawal1,
					continentList[0].WithdrawalCode,
					workingGasVolume1,
					continentList[0].WorkingGasVolumeCode,
					injectionCapacity1,
					continentList[0].InjectionCapacityCode,
					withdrawalCapacity1,
					continentList[0].WithdrawalCapacityCode,
					continentList[0].Info,
					countryList[countryLen-2:],
				}
			}
		}
		var data []EicData
		data = append(data, euData)
		data = append(data, neData)
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = data
	}
}

// EicDataList 欧洲天然气细节列表
// @title	获取欧洲天然气列表
// @Description	获取欧洲天然气列表接口
// @Param	Date query string true	"查询日期"
// @Param	Country query string true	"国家"
// @Success 200 {object} models.
// @router /data/eicData [get]
func (this *TradeCommonController) EicDataList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	country := this.GetString("Country")
	ssoList, err := data_manage.GetSSOEicDate(date, country)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	storageList, err := data_manage.GetStorageEicDate(date, country)
	if err != nil {
		br.Msg = "获取持仓排名失败"
		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
		return
	}
	var data []EicData
	for _, sso := range ssoList {
		gasInStorage, _ := strconv.ParseFloat(sso.GasInStorage, 64)
		full, _ := strconv.ParseFloat(sso.Full, 64)
		trend, _ := strconv.ParseFloat(sso.Trend, 64)
		injection, _ := strconv.ParseFloat(sso.Injection, 64)
		withdrawal, _ := strconv.ParseFloat(sso.Withdrawal, 64)
		workingGasVolume, _ := strconv.ParseFloat(sso.WorkingGasVolume, 64)
		injectionCapacity, _ := strconv.ParseFloat(sso.InjectionCapacity, 64)
		withdrawalCapacity, _ := strconv.ParseFloat(sso.WithdrawalCapacity, 64)
		item := EicData{
			sso.Country,
			sso.Type,
			sso.EicCode,
			sso.ShortName,
			sso.Name,
			sso.Status,
			sso.GasDayStartedOn,
			gasInStorage,
			sso.GasInStorageCode,
			full,
			sso.FullCode,
			trend,
			sso.TrendCode,
			injection,
			sso.InjectionCode,
			withdrawal,
			sso.WithdrawalCode,
			workingGasVolume,
			sso.WorkingGasVolumeCode,
			injectionCapacity,
			sso.InjectionCapacityCode,
			withdrawalCapacity,
			sso.WithdrawalCapacityCode,
			sso.Info,
			[]*data_manage.BaseFromTradeEicIndex{},
		}
		for _, st := range storageList {
			if item.ShortName == st.ShortName {
				item.Children = append(item.Children, st)
			}
		}
		data = append(data, item)
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = data
}

// EicHistoryData
// @title	获取欧洲天然气历史列表
// @Description	获取欧洲天然气历史列表接口
// @Param	Code query string true	"Code"
// @Param	StartDate query string false	"开始时间"
// @Param	EndDate query string false	"结束时间"
// @Success 200 {object} models.
// @router /data/eicHistoryData [get]
func (this *TradeCommonController) EicHistoryData() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	code := this.GetString("Code")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	var eicList []*data_manage.BaseFromTradeEicIndex
	var err error
	if endDate != "" {
		eicList, err = data_manage.GetEicHistoryDateByDate(code, startDate, endDate)
		if err != nil {
			br.Msg = "获取持仓排名失败"
			br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
			return
		}
	} else {
		eicList, err = data_manage.GetEicHistoryDate(code)
		if err != nil {
			br.Msg = "获取持仓排名失败"
			br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
			return
		}
	}
	var data []EicData
	for _, eic := range eicList {
		gasInStorage, _ := strconv.ParseFloat(eic.GasInStorage, 64)
		full, _ := strconv.ParseFloat(eic.Full, 64)
		trend, _ := strconv.ParseFloat(eic.Trend, 64)
		injection, _ := strconv.ParseFloat(eic.Injection, 64)
		withdrawal, _ := strconv.ParseFloat(eic.Withdrawal, 64)
		workingGasVolume, _ := strconv.ParseFloat(eic.WorkingGasVolume, 64)
		injectionCapacity, _ := strconv.ParseFloat(eic.InjectionCapacity, 64)
		withdrawalCapacity, _ := strconv.ParseFloat(eic.WithdrawalCapacity, 64)
		item := EicData{
			eic.Country,
			eic.Type,
			eic.EicCode,
			eic.ShortName,
			eic.Name,
			eic.Status,
			eic.GasDayStartedOn,
			gasInStorage,
			eic.GasInStorageCode,
			full,
			eic.FullCode,
			trend,
			eic.TrendCode,
			injection,
			eic.InjectionCode,
			withdrawal,
			eic.WithdrawalCode,
			workingGasVolume,
			eic.WorkingGasVolumeCode,
			injectionCapacity,
			eic.InjectionCapacityCode,
			withdrawalCapacity,
			eic.WithdrawalCapacityCode,
			eic.Info,
			[]*data_manage.BaseFromTradeEicIndex{},
		}
		data = append(data, item)
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = data
}

//// EicHistoryDataByDate
//// @title	根据时间获取欧洲天然气历史列表
//// @Description	根据时间获取欧洲天然气历史列表
//// @Param	Code query string true	"Code"
//// @Param	Date1 query string true	"时间1"
//// @Param	Date2 query string true	"时间2"
//// @Success 200 {object} models.
//// @router /data/eicHistoryDataByDate [get]
//func (this *TradeCommonController) EicHistoryDataByDate() {
//	br := new(models.BaseResponse).Init()
//	defer func() {
//		this.Data["json"] = br
//		this.ServeJSON()
//	}()
//	code := this.GetString("Code")
//	date1 := this.GetString("Date1")
//	date2 := this.GetString("Date2")
//	eicList, err := data_manage.GetEicHistoryDateByDate(code,date1,date2)
//	if err != nil {
//		br.Msg = "获取持仓排名失败"
//		br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
//		return
//	}
//	var data []EicData
//	for _, eic := range eicList {
//		gasInStorage, _ := strconv.ParseFloat(eic.GasInStorage, 64)
//		full, _ := strconv.ParseFloat(eic.Full, 64)
//		trend, _ := strconv.ParseFloat(eic.Trend, 64)
//		injection, _ := strconv.ParseFloat(eic.Injection, 64)
//		withdrawal, _ := strconv.ParseFloat(eic.Withdrawal, 64)
//		workingGasVolume, _ := strconv.ParseFloat(eic.WorkingGasVolume, 64)
//		injectionCapacity, _ := strconv.ParseFloat(eic.InjectionCapacity, 64)
//		withdrawalCapacity, _ := strconv.ParseFloat(eic.WithdrawalCapacity, 64)
//		item := EicData{
//			eic.Country,
//			eic.Type,
//			eic.EicCode,
//			eic.ShortName,
//			eic.Name,
//			eic.Status,
//			eic.GasDayStartedOn,
//			gasInStorage,
//			eic.GasInStorageCode,
//			full,
//			eic.FullCode,
//			trend,
//			eic.TrendCode,
//			injection,
//			eic.InjectionCode,
//			withdrawal,
//			eic.WithdrawalCode,
//			workingGasVolume,
//			eic.WorkingGasVolumeCode,
//			injectionCapacity,
//			eic.InjectionCapacityCode,
//			withdrawalCapacity,
//			eic.WithdrawalCapacityCode,
//			eic.Info,
//			[]*data_manage.BaseFromTradeEicIndex{},
//		}
//		data = append(data, item)
//	}
//
//	br.Ret = 200
//	br.Success = true
//	br.Msg = "获取成功"
//	br.Data = data
//}

// CoalMineClassify
// @title	获取中国煤炭网分类列表
// @Description	获取中国煤炭网分类列表
// @Success 200 {object} models.
// @router /data/coalMineData/classify [get]
func (this *TradeCommonController) CoalMineClassify() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	var coalList []data_manage.BaseFromCoalmineClassify
	var suffix string
	var coal data_manage.BaseFromCoalmineClassify
	var childs []data_manage.CoalChild
	var child data_manage.CoalChild
	suffix = "jsm_index"
	groups, err := data_manage.GetProvinceFromCoalmineIndex(suffix)
	if err != nil {
		br.Msg = "获取煤炭分类数据失败"
		br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
		return
	}
	coal.ClassifyId = 1
	coal.ClassifyName = "晋陕蒙三省煤矿产量周度数据"
	jsmId := 100
	for _, group := range groups {
		jsmId++
		child.ClassifyId = jsmId
		child.ClassifyName = *group
		childs = append(childs, child)
	}

	coal.Child = childs
	coalList = append(coalList, coal)

	suffix = "company_index"
	groups = []*string{}
	childs = []data_manage.CoalChild{}
	groups, err = data_manage.GetGroupNameFromCoalmineIndex(suffix)
	if err != nil {
		br.Msg = "获取煤炭分类数据失败"
		br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
		return
	}
	coal.ClassifyId = 2
	coal.ClassifyName = "442家晋陕蒙煤矿周度产量"
	companyId := 200
	for _, group := range groups {
		companyId++
		child.ClassifyId = companyId
		child.ClassifyName = *group
		childs = append(childs, child)
	}
	coal.Child = childs
	coalList = append(coalList, coal)

	suffix = "firm_index"
	groups = []*string{}
	childs = []data_manage.CoalChild{}
	groups, err = data_manage.GetGroupNameFromCoalmineIndex(suffix)
	if err != nil {
		br.Msg = "获取煤炭分类数据失败"
		br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
		return
	}
	coal.ClassifyId = 3
	coal.ClassifyName = "全国分企业煤炭产量旬度数据"
	firmId := 300
	for _, group := range groups {
		firmId++
		child.ClassifyId = firmId
		child.ClassifyName = *group
		childs = append(childs, child)

	}
	coal.Child = childs
	coalList = append(coalList, coal)

	suffix = "coastal_index"
	groups = []*string{}
	childs = []data_manage.CoalChild{}
	groups, err = data_manage.GetGroupNameFromCoalmineIndex(suffix)
	if err != nil {
		br.Msg = "获取煤炭分类数据失败"
		br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
		return
	}
	coal.ClassifyId = 4
	coal.ClassifyName = "沿海八省动力煤终端用户供耗存"
	coastalId := 400
	for _, group := range groups {
		coastalId++
		child.ClassifyId = coastalId
		child.ClassifyName = *group
		childs = append(childs, child)

	}
	coal.Child = childs
	coalList = append(coalList, coal)

	suffix = "inland_index"
	groups = []*string{}
	childs = []data_manage.CoalChild{}
	groups, err = data_manage.GetGroupNameFromCoalmineIndex(suffix)
	if err != nil {
		br.Msg = "获取煤炭分类数据失败"
		br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
		return
	}
	coal.ClassifyId = 5
	coal.ClassifyName = "内陆17省动力煤终端用户供耗存"
	inlandId := 500
	for _, group := range groups {
		inlandId++
		child.ClassifyId = inlandId
		child.ClassifyName = *group
		childs = append(childs, child)

	}
	coal.Child = childs
	coalList = append(coalList, coal)

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = coalList
}

// CoalMineFrequency
// @title	获取中国煤炭网频度
// @Description	获取中国煤炭网频度
// @Param	ClassifyId query int true	"数据id"
// @Success 200 {object} models.
// @router /data/coalMineData/frequency [get]
func (this *TradeCommonController) CoalMineFrequency() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()

	classifyId, _ := this.GetInt("ClassifyId")
	var suffix string
	if classifyId == 1 {
		suffix = "jsm_index"
	} else if classifyId == 2 {
		suffix = "company_index"
	} else if classifyId == 3 {
		suffix = "firm_index"
	} else if classifyId == 4 {
		suffix = "coastal_index"
	} else if classifyId == 5 {
		suffix = "inland_index"
	}
	frequency, err := data_manage.GetFrequencyFromCoal(suffix)
	if err != nil {
		br.Msg = "获取煤炭频度数据失败"
		br.ErrMsg = "获取煤炭频度数据失败,Err:" + err.Error()
		return
	}
	var resp data_manage.FrequencyResp
	switch *frequency {
	case "日度":
		resp.Frequency = 1
	case "周度":
		resp.Frequency = 2
	case "旬度":
		resp.Frequency = 3
	case "月度":
		resp.Frequency = 4
	case "季度":
		resp.Frequency = 5
	case "年度":
		resp.Frequency = 6
	default:
		resp.Frequency = 99
	}
	var list []data_manage.FrequencyResp
	list = append(list, resp)
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = list
}

// CoalMineData
// @title	获取中国煤炭网详细数据列表
// @Description	获取中国煤炭网详细数据接口
// @Param	ClassifyId query int true	"数据id"
// @Param	GroupName query string true	"分组名"
// @Param	Frequency query string true	"频度"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Success 200 {object} []data_manage.CoalmineDataResp
// @router /data/coalMineData/data [get]
func (this *TradeCommonController) CoalMineData() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	classifyId, _ := this.GetInt("ClassifyId")
	frequency := this.GetString("Frequency")
	groupName := this.GetString("GroupName")
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	var startSize int

	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = utils.StartIndex(currentIndex, pageSize)
	//var groups []*string
	//var err error
	//var suffix string
	//if classifyId == 1 {
	//	suffix = "jsm_index"
	//} else if classifyId == 2 {
	//	suffix = "company_index"
	//} else if classifyId == 3 {
	//	suffix = "firm_index"
	//} else if classifyId == 4 {
	//	suffix = "coastal_index"
	//} else if classifyId == 5 {
	//	suffix = "inland_index"
	//}

	switch classifyId {
	case 1:
		classifies, err := data_manage.GetClassifyCoalmineIndexByGroupName(groupName)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		var lists []data_manage.CoalmineDataPageResp
		for _, classify := range classifies {
			items, err := data_manage.GetPageFromCoalmineIndexByFrequency(frequency, *classify, startSize, pageSize)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			total, err := data_manage.GetCountFromJsm(*classify)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			page := paging.GetPaging(currentIndex, pageSize, total)
			var resp data_manage.CoalmineDataPageResp
			for i, item := range items {
				if i == 0 {
					resp.ModifyTime = item.CreateTime
				}
				resp.Paging = page
				resp.IndexName = item.IndexName
				resp.IndexCode = item.IndexCode
				resp.Unit = item.Unit
				resp.Frequency = item.Frequency

				//组装dataList
				var dataItem data_manage.DataList
				dataItem.DataTime = item.DataTime
				dataItem.Value = item.DealValue
				resp.DataList = append(resp.DataList, dataItem)
			}
			lists = append(lists, resp)
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 2:
		classifies, err := data_manage.GetClassifyCompanyByGroupName(groupName)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		var lists []data_manage.CoalmineDataPageResp
		for _, classify := range classifies {
			items, err := data_manage.GetPageFromCoalmineCompanyIndexByFrequency(frequency, *classify, startSize, pageSize)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			total, err := data_manage.GetCountFromCompany(*classify)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			page := paging.GetPaging(currentIndex, pageSize, total)
			var resp data_manage.CoalmineDataPageResp
			for i, item := range items {
				if i == 0 {
					resp.ModifyTime = item.CreateTime
				}
				resp.Paging = page
				resp.IndexName = item.IndexName
				resp.IndexCode = item.IndexCode
				resp.Unit = item.Unit
				resp.Frequency = item.Frequency

				//组装dataList
				var dataItem data_manage.DataList
				dataItem.DataTime = item.DataTime
				dataItem.Value = item.DealValue
				resp.DataList = append(resp.DataList, dataItem)
			}
			lists = append(lists, resp)
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 3:
		classifies, err := data_manage.GetClassifyFirmByGroupName(groupName)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		var lists []data_manage.CoalmineDataPageResp
		for _, classify := range classifies {
			items, err := data_manage.GetPageFromCoalmineFirmIndexByFrequency(frequency, *classify, startSize, pageSize)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			total, err := data_manage.GetCountFromFirm(*classify)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			page := paging.GetPaging(currentIndex, pageSize, total)
			var resp data_manage.CoalmineDataPageResp
			for i, item := range items {
				if i == 0 {
					resp.ModifyTime = item.CreateTime
				}
				resp.Paging = page
				resp.IndexName = item.IndexName
				resp.IndexCode = item.IndexCode
				resp.Unit = item.Unit
				resp.Frequency = item.Frequency

				//组装dataList
				var dataItem data_manage.DataList
				dataItem.DataTime = item.DataTime
				dataItem.Value = item.DealValue
				resp.DataList = append(resp.DataList, dataItem)
			}
			lists = append(lists, resp)
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 4:
		classifies, err := data_manage.GetClassifyCoastalByGroupName(groupName)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		var lists []data_manage.CoalmineDataPageResp
		for _, classify := range classifies {
			items, err := data_manage.GetPageFromCoalmineCoastalIndexByFrequency(frequency, *classify, startSize, pageSize)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			total, err := data_manage.GetCountFromCoastal(*classify)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			page := paging.GetPaging(currentIndex, pageSize, total)
			var resp data_manage.CoalmineDataPageResp
			for i, item := range items {
				if i == 0 {
					resp.ModifyTime = item.CreateTime
				}
				resp.Paging = page
				resp.IndexName = item.IndexName
				resp.IndexCode = item.IndexCode
				resp.Unit = item.Unit
				resp.Frequency = item.Frequency

				//组装dataList
				var dataItem data_manage.DataList
				dataItem.DataTime = item.DataTime
				dataItem.Value = item.DealValue
				resp.DataList = append(resp.DataList, dataItem)
			}
			lists = append(lists, resp)
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 5:
		classifies, err := data_manage.GetClassifyInlandByGroupName(groupName)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		var lists []data_manage.CoalmineDataPageResp
		for _, classify := range classifies {
			items, err := data_manage.GetPageFromCoalmineInlandIndexByFrequency(frequency, *classify, startSize, pageSize)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			total, err := data_manage.GetCountFromInland(*classify)
			if err != nil {
				br.Msg = "获取煤炭数据失败"
				br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
				return
			}
			page := paging.GetPaging(currentIndex, pageSize, total)
			var resp data_manage.CoalmineDataPageResp
			for i, item := range items {
				if i == 0 {
					resp.ModifyTime = item.CreateTime
				}
				resp.Paging = page
				resp.IndexName = item.IndexName
				resp.IndexCode = item.IndexCode
				resp.Unit = item.Unit
				resp.Frequency = item.Frequency

				//组装dataList
				var dataItem data_manage.DataList
				dataItem.DataTime = item.DataTime
				dataItem.Value = item.DealValue
				resp.DataList = append(resp.DataList, dataItem)
			}
			lists = append(lists, resp)
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	default:
		br.Ret = 200
		br.Success = true
		br.Msg = "获取煤炭数据失败"
		br.ErrMsg = "获取煤炭度数据失败,Err: classifyId 错误"
		return
	}
}

// CoalSearchList
// @Title 煤炭网模糊搜索
// @Description 煤炭网模糊搜索
// @Param   Keyword   query   string  ture       "关键字搜索"
// @Success 200 {object} models.BaseResponse
// @router /data/coalMineData/search [get]
func (this *TradeCommonController) CoalSearchList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()

	//关键字
	keyword := this.GetString("Keyword")

	list, err := data_manage.GetCoalItemList(keyword)
	if err != nil {
		br.ErrMsg = "获取失败，Err:" + err.Error()
		br.Msg = "获取失败"
		return
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = list
}

// CoalSingleData
// @Title 获取煤炭单条数据
// @Description 获取煤炭单条数据
// @Param   IndexCode   query   string  true       "指标唯一编码"
// @Success 200 {object} []data_manage.CoalmineSingalDataResp
// @router  /data/coalMineData/single_data [get]
func (this *TradeCommonController) CoalSingleData() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	indexCode := this.GetString("IndexCode")
	var classifyId int
	var suffix string
	if strings.Contains(indexCode, "jsm") {
		classifyId = 1
		suffix = "jsm_index"
	} else if strings.Contains(indexCode, "company") {
		classifyId = 2
		suffix = "company_index"
	} else if strings.Contains(indexCode, "firm") {
		classifyId = 3
		suffix = "firm_index"
	} else if strings.Contains(indexCode, "coastal") {
		classifyId = 4
		suffix = "coastal_index"
	} else if strings.Contains(indexCode, "inland") {
		classifyId = 5
		suffix = "inland_index"
	}

	switch classifyId {
	case 1:
		items, err := data_manage.GetBaseFromCoalmineIndexByCode(indexCode)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		groups, err := data_manage.GetProvinceFromCoalmineIndex(suffix)
		if err != nil {
			br.Msg = "获取煤炭分类数据失败"
			br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
			return
		}
		groupMap := make(map[string]int)
		jsmId := 100
		for _, group := range groups {
			jsmId++
			groupMap[*group] = jsmId
		}
		var lists []data_manage.CoalmineSingalDataResp
		var resp data_manage.CoalmineSingalDataResp

		classify := items[0].IndexName
		for i, item := range items {
			if item.IndexName != classify {
				lists = append(lists, resp)
				classify = item.IndexName
			}
			resp.IndexName = item.IndexName
			resp.IndexCode = item.IndexCode
			resp.GroupId = groupMap[item.Province]
			resp.GroupName = item.Province
			resp.Unit = item.Unit
			resp.Frequency = item.Frequency
			resp.ModifyTime = item.ModifyTime
			resp.ClassifyId = classifyId

			//组装dataList
			var dataItem data_manage.DataList
			dataItem.DataTime = item.DataTime
			dataItem.Value = item.DealValue
			resp.DataList = append(resp.DataList, dataItem)

			if i == len(items)-1 {
				lists = append(lists, resp)
			}
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 2:
		items, err := data_manage.GetBaseFromCoalmineCompanyIndexByCode(indexCode)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		groups, err := data_manage.GetGroupNameFromCoalmineIndex(suffix)
		if err != nil {
			br.Msg = "获取煤炭分类数据失败"
			br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
			return
		}
		groupMap := make(map[string]int)
		companyId := 200
		for _, group := range groups {
			companyId++
			groupMap[*group] = companyId
		}
		var lists []data_manage.CoalmineSingalDataResp
		var resp data_manage.CoalmineSingalDataResp

		classify := items[0].IndexName
		for i, item := range items {
			if item.IndexName != classify {
				lists = append(lists, resp)
				classify = item.IndexName
			}
			resp.IndexName = item.IndexName
			resp.IndexCode = item.IndexCode
			resp.Unit = item.Unit
			resp.GroupId = groupMap[item.GroupName]
			resp.GroupName = item.GroupName
			resp.Frequency = item.Frequency
			resp.ModifyTime = item.ModifyTime
			resp.ClassifyId = classifyId

			//组装dataList
			var dataItem data_manage.DataList
			dataItem.DataTime = item.DataTime
			dataItem.Value = item.DealValue
			resp.DataList = append(resp.DataList, dataItem)

			if i == len(items)-1 {
				lists = append(lists, resp)
			}
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 3:
		items, err := data_manage.GetBaseFromCoalmineFirmIndexByCode(indexCode)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		groups, err := data_manage.GetGroupNameFromCoalmineIndex(suffix)
		if err != nil {
			br.Msg = "获取煤炭分类数据失败"
			br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
			return
		}
		groupMap := make(map[string]int)
		firmId := 300
		for _, group := range groups {
			firmId++
			groupMap[*group] = firmId
		}
		var lists []data_manage.CoalmineSingalDataResp
		var resp data_manage.CoalmineSingalDataResp

		classify := items[0].IndexName
		for i, item := range items {
			if item.IndexName != classify {
				lists = append(lists, resp)
				classify = item.IndexName
			}
			resp.IndexName = item.IndexName
			resp.IndexCode = item.IndexCode
			resp.Unit = item.Unit
			resp.GroupId = groupMap[item.GroupName]
			resp.GroupName = item.GroupName
			resp.Frequency = item.Frequency
			resp.ModifyTime = item.ModifyTime
			resp.ClassifyId = classifyId

			//组装dataList
			var dataItem data_manage.DataList
			dataItem.DataTime = item.DataTime
			dataItem.Value = item.DealValue
			resp.DataList = append(resp.DataList, dataItem)

			if i == len(items)-1 {
				lists = append(lists, resp)
			}
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 4:
		items, err := data_manage.GetBaseFromCoalmineCoastalIndexByCode(indexCode)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		groups, err := data_manage.GetGroupNameFromCoalmineIndex(suffix)
		if err != nil {
			br.Msg = "获取煤炭分类数据失败"
			br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
			return
		}
		groupMap := make(map[string]int)
		coastalId := 400
		for _, group := range groups {
			coastalId++
			groupMap[*group] = coastalId
		}
		var lists []data_manage.CoalmineSingalDataResp
		var resp data_manage.CoalmineSingalDataResp

		classify := items[0].IndexName
		for i, item := range items {
			if item.IndexName != classify {
				lists = append(lists, resp)
				classify = item.IndexName
			}
			resp.IndexName = item.IndexName
			resp.IndexCode = item.IndexCode
			resp.Unit = item.Unit
			resp.GroupId = groupMap[item.GroupName]
			resp.GroupName = item.GroupName
			resp.Frequency = item.Frequency
			resp.ModifyTime = item.ModifyTime
			resp.ClassifyId = classifyId

			//组装dataList
			var dataItem data_manage.DataList
			dataItem.DataTime = item.DataTime
			dataItem.Value = item.DealValue
			resp.DataList = append(resp.DataList, dataItem)

			if i == len(items)-1 {
				lists = append(lists, resp)
			}
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	case 5:
		items, err := data_manage.GetBaseFromCoalmineInlandIndexByCode(indexCode)
		if err != nil {
			br.Msg = "获取煤炭数据失败"
			br.ErrMsg = "获取煤炭度数据失败,Err:" + err.Error()
			return
		}
		groups, err := data_manage.GetGroupNameFromCoalmineIndex(suffix)
		if err != nil {
			br.Msg = "获取煤炭分类数据失败"
			br.ErrMsg = "获取煤炭度分类数据失败,Err: " + err.Error()
			return
		}
		groupMap := make(map[string]int)
		inlandId := 500
		for _, group := range groups {
			inlandId++
			groupMap[*group] = inlandId
		}
		var lists []data_manage.CoalmineSingalDataResp
		var resp data_manage.CoalmineSingalDataResp

		classify := items[0].IndexName
		for i, item := range items {
			if item.IndexName != classify {
				lists = append(lists, resp)
				classify = item.IndexName
			}
			resp.IndexName = item.IndexName
			resp.IndexCode = item.IndexCode
			resp.Unit = item.Unit
			resp.GroupId = groupMap[item.GroupName]
			resp.GroupName = item.GroupName
			resp.Frequency = item.Frequency
			resp.ModifyTime = item.ModifyTime
			resp.ClassifyId = classifyId

			//组装dataList
			var dataItem data_manage.DataList
			dataItem.DataTime = item.DataTime
			dataItem.Value = item.DealValue
			resp.DataList = append(resp.DataList, dataItem)

			if i == len(items)-1 {
				lists = append(lists, resp)
			}
		}
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = lists
	default:
		br.Msg = "获取煤炭数据失败"
		br.ErrMsg = "获取煤炭度数据失败,Err: indexCode 错误"
		return
	}
}

// ExportCoalList
// @Title 导出煤炭数据
// @Description 导出煤炭数据
// @Param	ClassifyId query int true	"数据id"
// @Param   IndexName   query   string  true       "名称关键词"
// @Param   IndexCode   query   string  true       "指标唯一编码"
// @Param   TypeName   query   string  true       "分类"
// @Param   Frequency   query   string  false       "频度"
// @Param   UnitName   query   string  false       "单位"
// @Success 200  导出成功
// @router /export/coalList [get]
func (this *TradeCommonController) ExportCoalList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	classifyId, _ := this.GetInt("ClassifyId")
	var suffix string
	if classifyId == 1 {
		suffix = "jsm_index"
	} else if classifyId == 2 {
		suffix = "company_index"
	} else if classifyId == 3 {
		suffix = "firm_index"
	} else if classifyId == 4 {
		suffix = "coastal_index"
	} else if classifyId == 5 {
		suffix = "inland_index"
	}
	breedName := this.GetString("TypeName") //分类

	secNameList := make([]*models.EdbdataExportList, 0)

	dir, _ := os.Executable()
	exPath := filepath.Dir(dir)

	downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()

	//不为空就是导出分类表
	if breedName != "" {
		//获取指标
		var secNameList []*string
		var err error
		if classifyId == 1 {
			secNameList, err = data_manage.GetClassifyJsmByGroupName(breedName)
			if err != nil {
				fmt.Println("获取数据失败，Err:" + err.Error())
				return
			}
		} else {
			secNameList, err = data_manage.GetClassifyFromCoalByGroupName(suffix, breedName)
			if err != nil {
				fmt.Println("获取数据失败，Err:" + err.Error())
				return
			}
		}
		if len(secNameList) <= 0 {
			fmt.Println("secNameList长度为0")
			return
		}
		sheetNew, err := xlsxFile.AddSheet(breedName)

		if err != nil {
			fmt.Println("新增Sheet失败", err.Error())
			return
		}
		//sheetNew.SetColWidth()
		//获取指标数据
		windRow := sheetNew.AddRow()
		secNameRow := sheetNew.AddRow()
		indexCodeRow := sheetNew.AddRow()
		frequencyRow := sheetNew.AddRow()
		unitRow := sheetNew.AddRow()
		lastModifyDateRow := sheetNew.AddRow()
		//获取分类下指标最大数据量
		var dataMax int
		if classifyId == 1 {
			dataMax, err = data_manage.GetCoalJsmMaxCount(breedName)
			if err != nil {
				fmt.Println("获取指标最大数据量失败", err.Error())
				return
			}
		} else {
			dataMax, err = data_manage.GetCoalCompanyMaxCount(suffix, breedName)
			if err != nil {
				fmt.Println("获取指标最大数据量失败", err.Error())
				return
			}
		}

		setRowIndex := 6
		for k, sv := range secNameList {
			//获取数据
			dataList, err := data_manage.GetBaseFromCoalIndexByCode(suffix, *sv)
			if err != nil {
				br.Msg = "获取数据失败"
				br.ErrMsg = "获取数据失败,Err:" + err.Error()
				return
			}
			windRow.AddCell().SetValue(breedName)
			secNameRow.AddCell().SetValue("指标名称")
			indexCodeRow.AddCell().SetValue("指标ID")
			frequencyRow.AddCell().SetValue("频率")
			unitRow.AddCell().SetValue("单位")
			lastModifyDateRow.AddCell().SetValue("更新时间")

			secNameRow.AddCell().SetValue(dataList[0].IndexName)
			indexCodeRow.AddCell().SetValue(dataList[0].IndexCode)
			frequencyRow.AddCell().SetValue(dataList[0].Frequency)
			unitRow.AddCell().SetValue(dataList[0].Unit)
			lastModifyDateRow.AddCell().SetValue(dataList[0].ModifyTime)

			windRow.AddCell()
			windRow.AddCell()
			secNameRow.AddCell()
			indexCodeRow.AddCell()
			frequencyRow.AddCell()
			unitRow.AddCell()
			lastModifyDateRow.AddCell()
			min := k * 3
			sheetNew.SetColWidth(min, min, 15)

			if len(dataList) <= 0 {
				for n := 0; n < dataMax; n++ {
					rowIndex := setRowIndex + n
					row := sheetNew.Row(rowIndex)
					row.AddCell()
					row.AddCell()
					row.AddCell()
				}
			} else {
				endRowIndex := 0
				for rk, dv := range dataList {
					rowIndex := setRowIndex + rk
					row := sheetNew.Row(rowIndex)
					if classifyId == 3 {
						displayDateCell := row.AddCell()
						displayDateCell.SetValue(dv.DataTime)
					} else {
						displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
						displayDateCell := row.AddCell()
						style := new(xlsx.Style)
						style.ApplyAlignment = true
						style.Alignment.WrapText = true
						displayDateCell.SetStyle(style)
						displayDateCell.SetDate(displayDate)
					}

					row.AddCell().SetValue(dv.DealValue)
					row.AddCell()
					endRowIndex = rowIndex
				}
				if len(dataList) < dataMax {
					dataLen := dataMax - len(dataList)
					for n := 0; n < dataLen; n++ {
						rowIndex := (endRowIndex + 1) + n
						row := sheetNew.Row(rowIndex)
						row.AddCell()
						row.AddCell()
						row.AddCell()
					}
				}
			}
		}
	} else {
		name := this.GetString("IndexName")
		indexCode := this.GetString("IndexCode") //指标唯一编码
		unit := this.GetString("UnitName")
		modifyTime := this.GetString("ModifyTime")

		sheet, err := xlsxFile.AddSheet("指标")
		if err != nil {
			br.Msg = "新增Sheet失败"
			br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
			return
		}
		//获取数据
		dataList, err := data_manage.GetBaseFromCoalIndexByCode(suffix, indexCode)
		if err != nil {
			br.Msg = "获取数据失败"
			br.ErrMsg = "获取数据失败,Err:" + err.Error()
			return
		}
		//获取指标数据
		windRow := sheet.AddRow()
		windRow.AddCell().SetValue("中国煤炭网")
		rowSecName := sheet.AddRow()
		celSecName := rowSecName.AddCell()
		celSecName.SetValue("指标名称")
		cellSenName := rowSecName.AddCell()
		cellSenName.SetValue(name)
		indexCodeRow := sheet.AddRow()
		indexCodeRow.AddCell().SetValue("指标ID")
		indexCodeRow.AddCell().SetValue(indexCode)

		rowFrequency := sheet.AddRow()
		celFrequency := rowFrequency.AddCell()
		celFrequency.SetValue("频率")
		rowFrequency.AddCell().SetValue(dataList[0].Frequency)

		rowUnit := sheet.AddRow()
		celUnit := rowUnit.AddCell()
		celUnit.SetValue("单位")
		cellUnit := rowUnit.AddCell()
		cellUnit.SetValue(unit)

		rowModifyDate := sheet.AddRow()
		rowModifyCell := rowModifyDate.AddCell()
		rowModifyCell.SetValue("更新时间")
		rowModifyCell = rowModifyDate.AddCell()
		rowModifyCell.SetValue(modifyTime)

		fmt.Println("len(dataList):", len(dataList))
		dataMax, err := data_manage.GetCoalCount(suffix, breedName)
		if err != nil {
			fmt.Println("获取指标最大数据量失败", err.Error())
			return
		}
		fmt.Println("dataMax:", dataMax)
		if len(dataList) <= 0 {
			for n := 0; n < dataMax; n++ {
				rowIndex := 6 + n
				row := sheet.Row(rowIndex)
				row.AddCell()
				row.AddCell()
				row.AddCell()
			}
		} else {
			endRowIndex := 0
			for rk, dv := range dataList {
				rowIndex := 6 + rk
				row := sheet.Row(rowIndex)
				displayDate, _ := time.Parse(utils.FormatDate, dv.DataTime)
				displayDateCell := row.AddCell()
				style := new(xlsx.Style)
				style.ApplyAlignment = true
				style.Alignment.WrapText = true
				displayDateCell.SetStyle(style)
				displayDateCell.SetDate(displayDate)

				row.AddCell().SetValue(dv.DealValue)
				row.AddCell()
				endRowIndex = rowIndex
			}
			if len(dataList) < dataMax {
				dataLen := dataMax - len(dataList)
				for n := 0; n < dataLen; n++ {
					rowIndex := (endRowIndex + 1) + n
					row := sheet.Row(rowIndex)
					row.AddCell()
					row.AddCell()
					row.AddCell()
				}
			}
		}
	}

	err := xlsxFile.Save(downLoadnFilePath)
	if err != nil {
		br.Msg = "保存文件失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	fileName := `中国煤炭网数据`
	if len(secNameList) > 0 {
		fileName = secNameList[0].ClassifyName
	}
	fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称
	this.Ctx.Output.Download(downLoadnFilePath, fileName)
	defer func() {
		os.Remove(downLoadnFilePath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "success"

}

// EicLatestDateV2
// @title	获取欧洲天然气最新日期V2
// @Description	获取欧洲天然气最新日期接口
// @Success 200 {object} models.
// @router /data/eicLatestDateV2 [get]
func (this *TradeCommonController) EicLatestDateV2() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	latestData, err := data_manage.GetEicDateV2()
	if err != nil {
		br.Msg = "获取日期失败"
		br.ErrMsg = "获取日期失败,Err:" + err.Error()
		return
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = latestData[0].GasDayStart
}

type EicDataV2 struct {
	Name               string      `json:"name" description:"指标名称"`
	Code               string      `json:"code" description:"指标编码"`
	GasDayStart        string      `json:"gasDayStart" description:"指标日期"`
	GasInStorage       float64     `json:"gasInStorage" description:"储存容量"`
	Consumption        string      `json:"consumption" description:"消耗"`
	ConsumptionFull    string      `json:"consumptionFull" description:"消耗百分比"`
	Injection          float64     `json:"injection" description:"注入量"`
	Withdrawal         float64     `json:"withdrawal" description:"减少量"`
	WorkingGasVolume   float64     `json:"workingGasVolume" description:"工作气体量"`
	InjectionCapacity  float64     `json:"injectionCapacity" description:"注入速度"`
	WithdrawalCapacity float64     `json:"withdrawalCapacity" description:"减少速度"`
	Status             string      `json:"status" description:"状态"`
	Trend              float64     `json:"trend" description:"较前日对比"`
	Full               float64     `json:"full" description:"储存容量百分比"`
	Info               string      `json:"info" description:"信息"`
	Children           []EicDataV2 `json:"children"`
}

// eicDataV2
// @title	获取欧洲天然气列表
// @Description	获取欧洲天然气列表接口
// @Param	Date query string true	"查询日期"
// @Success 200 {object} models.
// @router /data/eicDataV2 [get]
func (this *TradeCommonController) EicDataV2() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	list, err := data_manage.GetEicDataV2(date)
	if err != nil {
		br.Msg = "获取天然气数据失败"
		br.ErrMsg = "获取天然气数据失败,Err:" + err.Error()
		return
	}

	var continentItems []data_manage.BaseFromTradeEicIndexV2
	var countryItems []data_manage.BaseFromTradeEicIndexV2
	var ssoItems []data_manage.BaseFromTradeEicIndexV2
	var facItems []data_manage.BaseFromTradeEicIndexV2
	for _, item := range list {
		switch item.Type {
		case "continent":
			continentItems = append(continentItems, *item)
		case "country":
			countryItems = append(countryItems, *item)
		case "sso":
			ssoItems = append(ssoItems, *item)
		case "fac":
			facItems = append(facItems, *item)
		default:
			continue
		}
	}
	var data []data_manage.BaseFromTradeEicIndexV2
	data = continentItems
	for i, continentItem := range continentItems {
		for _, countryItem := range countryItems {
			if countryItem.Parent == continentItem.Name {
				data[i].Children = append(data[i].Children, countryItem)
			}
		}
		for j, country := range data[i].Children {
			for _, ssoItem := range ssoItems {
				if country.Name == ssoItem.Parent {
					data[i].Children[j].Children = append(data[i].Children[j].Children, ssoItem)
				}
			}
			for k, sso := range data[i].Children[j].Children {
				for _, facItem := range facItems {
					if sso.Name == facItem.Parent {
						data[i].Children[j].Children[k].Children = append(data[i].Children[j].Children[k].Children, facItem)
					}
				}
			}
		}
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = data
}

// EicHistoryDataV2
// @title	获取欧洲天然气历史列表
// @Description	获取欧洲天然气历史列表接口
// @Param	Code query string true	"Code"
// @Param	StartDate query string false	"开始时间"
// @Param	EndDate query string false	"结束时间"
// @Success 200 {object} []EicDataV2
// @router /data/eicHistoryDataV2 [get]
func (this *TradeCommonController) EicHistoryDataV2() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	code := this.GetString("Code")
	startDate := this.GetString("StartDate")
	endDate := this.GetString("EndDate")
	var eicList []*data_manage.BaseFromTradeEicIndexV2
	var err error
	if endDate != "" {
		eicList, err = data_manage.GetEicHistoryDateByDateV2(code, startDate, endDate)
		if err != nil {
			br.Msg = "获取持仓排名失败"
			br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
			return
		}
	} else {
		eicList, err = data_manage.GetEicHistoryDateV2(code)
		if err != nil {
			br.Msg = "获取持仓排名失败"
			br.ErrMsg = "获取持仓排名失败,Err:" + err.Error()
			return
		}
	}

	var data []EicDataV2
	for _, eic := range eicList {
		item := EicDataV2{
			Name:               eic.Name,
			Code:               eic.EicCode,
			GasDayStart:        eic.GasDayStart,
			GasInStorage:       eic.GasInStorage,
			Consumption:        eic.Consumption,
			ConsumptionFull:    eic.ConsumptionFull,
			Injection:          eic.Injection,
			Withdrawal:         eic.Withdrawal,
			WorkingGasVolume:   eic.WorkingGasVolume,
			InjectionCapacity:  eic.InjectionCapacity,
			WithdrawalCapacity: eic.WithdrawalCapacity,
			Status:             eic.Status,
			Trend:              eic.Trend,
			Full:               eic.Full,
			Info:               eic.Info,
		}
		data = append(data, item)
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = data
}

// eicContinentV2 欧洲天然气洲际及国家级列表
// @title	欧洲天然气洲际及国家级列表
// @Description	欧洲天然气洲际及国家级列表
// @Param	Date query string true	"查询日期"
// @Success 200 {object} []data_manage.BaseFromTradeEicIndexV2
// @router /data/eicContinentV2 [get]
func (this *TradeCommonController) EicContinentListV2() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	list, err := data_manage.GetContinentAndCountryEicDateV2(date)
	if err != nil {
		br.Msg = "获取天然气数据失败"
		br.ErrMsg = "获取天然气数据失败,Err:" + err.Error()
		return
	}

	var continentItems []data_manage.BaseFromTradeEicIndexV2
	var countryItems []data_manage.BaseFromTradeEicIndexV2
	for _, item := range list {
		switch item.Type {
		case "continent":
			continentItems = append(continentItems, *item)
		case "country":
			countryItems = append(countryItems, *item)
		default:
			continue
		}
	}
	var data []data_manage.BaseFromTradeEicIndexV2
	data = continentItems
	for i, continentItem := range continentItems {
		for _, countryItem := range countryItems {
			if countryItem.Parent == continentItem.Name {
				data[i].Children = append(data[i].Children, countryItem)
			}
		}
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = data
}

// EicDataListV2 欧洲天然气细节列表
// @title	欧洲天然气细节列表
// @Description	欧洲天然气细节列表
// @Param	Date query string true	"查询日期"
// @Param	Name query string true	"国家"
// @Success 200 {object} []data_manage.BaseFromTradeEicIndexV2
// @router /data/eicSSODataV2 [get]
func (this *TradeCommonController) EicDataListV2() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	date := this.GetString("Date")
	name := this.GetString("Name")
	list, err := data_manage.GetSSOAndFacEicDateV2(date, name)
	if err != nil {
		br.Msg = "获取天然气数据失败"
		br.ErrMsg = "获取天然气数据失败,Err:" + err.Error()
		return
	}
	var ssoItems []data_manage.BaseFromTradeEicIndexV2
	var facItems []data_manage.BaseFromTradeEicIndexV2
	for _, item := range list {
		switch item.Type {
		case "sso":
			ssoItems = append(ssoItems, *item)
		case "fac":
			facItems = append(facItems, *item)
		default:
			continue
		}
	}
	i := 0
	var data []data_manage.BaseFromTradeEicIndexV2
	for _, ssoItem := range ssoItems {
		if ssoItem.Parent == name {
			data = append(data, ssoItem)
			for _, facItem := range facItems {
				if facItem.Parent == ssoItem.Name {
					data[i].Children = append(data[i].Children, facItem)
				}
			}
			i++
		}
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = data
}
