|
@@ -1,10 +1,11 @@
|
|
-package data
|
|
+package excel
|
|
|
|
|
|
import (
|
|
import (
|
|
"errors"
|
|
"errors"
|
|
"eta/eta_chart_lib/models"
|
|
"eta/eta_chart_lib/models"
|
|
"eta/eta_chart_lib/models/data_manage"
|
|
"eta/eta_chart_lib/models/data_manage"
|
|
"eta/eta_chart_lib/models/request"
|
|
"eta/eta_chart_lib/models/request"
|
|
|
|
+ "eta/eta_chart_lib/services/data"
|
|
"eta/eta_chart_lib/utils"
|
|
"eta/eta_chart_lib/utils"
|
|
"fmt"
|
|
"fmt"
|
|
"github.com/shopspring/decimal"
|
|
"github.com/shopspring/decimal"
|
|
@@ -15,250 +16,8 @@ import (
|
|
"time"
|
|
"time"
|
|
)
|
|
)
|
|
|
|
|
|
-
|
|
+
|
|
-func GetFirstEdbDataList(edbInfo *data_manage.EdbInfo, num int, manualDateList []string) (resultDataList []request.ManualDataReq, err error) {
|
|
+
|
|
- var dataList []*models.EdbDataList
|
|
|
|
- switch edbInfo.EdbInfoType {
|
|
|
|
- case 0:
|
|
|
|
- dataList, err = models.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, ``)
|
|
|
|
- case 1:
|
|
|
|
- _, dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
|
|
|
|
- default:
|
|
|
|
- err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- lenData := len(dataList)
|
|
|
|
- if lenData <= 0 {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- tmpManualDateNum := 0
|
|
|
|
- lenManualDate := len(manualDateList)
|
|
|
|
- if lenManualDate > 0 {
|
|
|
|
- sortDateList := manualDateList
|
|
|
|
- baseDateList := utils.StrArr{}
|
|
|
|
- baseDateList = append(baseDateList, sortDateList...)
|
|
|
|
- sort.Sort(baseDateList)
|
|
|
|
- sortDateList = append([]string{}, baseDateList...)
|
|
|
|
-
|
|
|
|
- lastData := dataList[lenData-1]
|
|
|
|
- lastDataDate, tmpErr := time.ParseInLocation(utils.FormatDate, lastData.DataTime, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- err = tmpErr
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- for _, tmpDateStr := range sortDateList {
|
|
|
|
- tmpDate, tmpErr := time.ParseInLocation(utils.FormatDate, tmpDateStr, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- err = tmpErr
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if tmpDate.After(lastDataDate) {
|
|
|
|
- tmpManualDateNum++
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- num = num - tmpManualDateNum
|
|
|
|
- if num > lenData {
|
|
|
|
- num = lenData
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- latestDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
|
|
|
|
- for i := 1; i <= num; i++ {
|
|
|
|
- dataTime, _ := time.ParseInLocation(utils.FormatDate, dataList[lenData-i].DataTime, time.Local)
|
|
|
|
- dataType := 1
|
|
|
|
-
|
|
|
|
- if edbInfo.EdbInfoType == 1 && dataTime.After(latestDateTime) {
|
|
|
|
- dataType = 5
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- resultDataList = append(resultDataList, request.ManualDataReq{
|
|
|
|
- DataType: dataType,
|
|
|
|
- DataTime: dataList[lenData-i].DataTime,
|
|
|
|
- ShowValue: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
|
- Value: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
|
- DataTimeType: 1,
|
|
|
|
- })
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-func GetOtherEdbDataList(edbInfo *data_manage.EdbInfo, dateList []string) (resultDataList []request.ManualDataReq, err error) {
|
|
|
|
- lenDate := len(dateList)
|
|
|
|
- if lenDate <= 0 {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- sortDateList := dateList
|
|
|
|
- baseDateList := utils.StrArr{}
|
|
|
|
- baseDateList = append(baseDateList, sortDateList...)
|
|
|
|
- sort.Sort(baseDateList)
|
|
|
|
- sortDateList = append([]string{}, baseDateList...)
|
|
|
|
-
|
|
|
|
- endDateTime, err := time.ParseInLocation(utils.FormatDate, sortDateList[0], time.Local)
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- firstDateTime, err := time.ParseInLocation(utils.FormatDate, sortDateList[lenDate-1], time.Local)
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var dataList []*models.EdbDataList
|
|
|
|
- switch edbInfo.EdbInfoType {
|
|
|
|
- case 0:
|
|
|
|
- dataList, err = models.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, ``)
|
|
|
|
- case 1:
|
|
|
|
- _, dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
|
|
|
|
- default:
|
|
|
|
- err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- baseDataList := make([]*models.EdbDataList, 0)
|
|
|
|
- var lastData *models.EdbDataList
|
|
|
|
- var isInsert bool
|
|
|
|
- for _, data := range dataList {
|
|
|
|
- tmpDate := data.DataTime
|
|
|
|
- tmpDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- err = tmpErr
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if tmpDateTime.Before(firstDateTime) {
|
|
|
|
- lastData = data
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if !isInsert && lastData != nil {
|
|
|
|
- baseDataList = append(baseDataList, lastData)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if tmpDateTime.After(endDateTime) {
|
|
|
|
- baseDataList = append(baseDataList, data)
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- baseDataList = append(baseDataList, data)
|
|
|
|
- isInsert = true
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- realValMap := make(map[string]string)
|
|
|
|
- for _, v := range baseDataList {
|
|
|
|
- realValMap[v.DataTime] = v.DataTime
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- handleDataMap := make(map[string]float64)
|
|
|
|
- err = HandleDataByLinearRegression(baseDataList, handleDataMap)
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- latestDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
|
|
|
|
-
|
|
|
|
- for _, date := range sortDateList {
|
|
|
|
- dataType := 1
|
|
|
|
- if _, ok := realValMap[date]; !ok {
|
|
|
|
- dataType = 2
|
|
|
|
- } else {
|
|
|
|
- dataTime, _ := time.ParseInLocation(utils.FormatDate, date, time.Local)
|
|
|
|
-
|
|
|
|
- if edbInfo.EdbInfoType == 1 && dataTime.After(latestDateTime) {
|
|
|
|
- dataType = 5
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- var value, showValue string
|
|
|
|
- if tmpVal, ok := handleDataMap[date]; ok {
|
|
|
|
- value = fmt.Sprint(tmpVal)
|
|
|
|
- showValue = value
|
|
|
|
- } else {
|
|
|
|
- dataType = 3
|
|
|
|
- }
|
|
|
|
- resultDataList = append(resultDataList, request.ManualDataReq{
|
|
|
|
- DataType: dataType,
|
|
|
|
- DataTime: date,
|
|
|
|
- ShowValue: showValue,
|
|
|
|
- Value: value,
|
|
|
|
- })
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-func GetFirstHistoryEdbDataList(edbInfo *data_manage.EdbInfo, num int, endDate string) (resultDataList []request.ManualDataReq, err error) {
|
|
|
|
- endDateTime, err := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var dataList []*models.EdbDataList
|
|
|
|
- switch edbInfo.EdbInfoType {
|
|
|
|
- case 0:
|
|
|
|
- dataList, err = models.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, endDate)
|
|
|
|
- case 1:
|
|
|
|
- _, dataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, endDate, true)
|
|
|
|
- default:
|
|
|
|
- err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- lenData := len(dataList)
|
|
|
|
- if lenData <= 0 {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- lastData := dataList[lenData-1]
|
|
|
|
- lastDataDateTime, err := time.ParseInLocation(utils.FormatDate, lastData.DataTime, time.Local)
|
|
|
|
- if err != nil {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if endDateTime.Equal(lastDataDateTime) || lastDataDateTime.After(endDateTime) {
|
|
|
|
- dataList = dataList[:lenData-1]
|
|
|
|
- lenData = len(dataList)
|
|
|
|
- }
|
|
|
|
- if num > lenData {
|
|
|
|
- num = lenData
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- latestDateTime, _ := time.ParseInLocation(utils.FormatDate, edbInfo.LatestDate, time.Local)
|
|
|
|
- for i := 1; i <= num; i++ {
|
|
|
|
- dataTime, _ := time.ParseInLocation(utils.FormatDate, dataList[lenData-i].DataTime, time.Local)
|
|
|
|
- dataType := 1
|
|
|
|
-
|
|
|
|
- if edbInfo.EdbInfoType == 1 && dataTime.After(latestDateTime) {
|
|
|
|
- dataType = 5
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- resultDataList = append(resultDataList, request.ManualDataReq{
|
|
|
|
- DataType: dataType,
|
|
|
|
- DataTime: dataList[lenData-i].DataTime,
|
|
|
|
- ShowValue: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
|
- Value: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
|
- })
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
type TableDataConfig struct {
|
|
type TableDataConfig struct {
|
|
EdbInfoIdList []int `description:"指标id列表,从左至右,从上到下的顺序"`
|
|
EdbInfoIdList []int `description:"指标id列表,从左至右,从上到下的顺序"`
|
|
Sort int `description:"日期排序,0:倒序,1:正序"`
|
|
Sort int `description:"日期排序,0:倒序,1:正序"`
|
|
@@ -270,15 +29,21 @@ type TableDataConfig struct {
|
|
TextRowData [][]request.ManualDataReq `description:"文本列表"`
|
|
TextRowData [][]request.ManualDataReq `description:"文本列表"`
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
type TableEdbInfo struct {
|
|
type TableEdbInfo struct {
|
|
EdbInfoId int `description:"指标ID"`
|
|
EdbInfoId int `description:"指标ID"`
|
|
Tag string `description:"标签"`
|
|
Tag string `description:"标签"`
|
|
EdbName string `description:"指标名称"`
|
|
EdbName string `description:"指标名称"`
|
|
|
|
+ EdbNameEn string `description:"英文指标名称"`
|
|
EdbAliasName string `description:"指标别名"`
|
|
EdbAliasName string `description:"指标别名"`
|
|
Frequency string `description:"频度"`
|
|
Frequency string `description:"频度"`
|
|
Unit string `description:"单位"`
|
|
Unit string `description:"单位"`
|
|
|
|
+ UnitEn string `description:"英文单位"`
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
type ManualData struct {
|
|
type ManualData struct {
|
|
DataType int `description:"数据类型,1:普通的,2:插值法,3:手动输入,4:公式计算"`
|
|
DataType int `description:"数据类型,1:普通的,2:插值法,3:手动输入,4:公式计算"`
|
|
DataTime string `description:"所属日期"`
|
|
DataTime string `description:"所属日期"`
|
|
@@ -290,147 +55,7 @@ type ManualData struct {
|
|
RelationEdbInfoList []request.RelationEdbInfo `description:"关联指标(计算公式中关联的指标,用于计算的时候去匹配)"`
|
|
RelationEdbInfoList []request.RelationEdbInfo `description:"关联指标(计算公式中关联的指标,用于计算的时候去匹配)"`
|
|
}
|
|
}
|
|
|
|
|
|
-func GetTableDataConfig(reqData request.TableDataReq) (tableDataConfig TableDataConfig, err error) {
|
|
+
|
|
-
|
|
|
|
- tableDataConfig.EdbInfoIdList = reqData.EdbInfoIdList
|
|
|
|
- tableDataConfig.Sort = reqData.Sort
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- var startDate string
|
|
|
|
-
|
|
|
|
- var firstEdbInfoId int
|
|
|
|
-
|
|
|
|
- manualDataList := make([]ManualData, 0)
|
|
|
|
-
|
|
|
|
- tableEdbInfoList := make([]TableEdbInfo, 0)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- firstDateMap := make(map[string]string)
|
|
|
|
- manualDateMap := make(map[string]string)
|
|
|
|
-
|
|
|
|
- for _, v := range reqData.Data {
|
|
|
|
-
|
|
|
|
- tmpTableEdbInfo := TableEdbInfo{
|
|
|
|
- EdbInfoId: v.EdbInfoId,
|
|
|
|
- Tag: v.Tag,
|
|
|
|
- EdbName: v.EdbName,
|
|
|
|
- EdbAliasName: v.EdbAliasName,
|
|
|
|
- Frequency: v.Frequency,
|
|
|
|
- Unit: v.Unit,
|
|
|
|
- }
|
|
|
|
- tableEdbInfoList = append(tableEdbInfoList, tmpTableEdbInfo)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if v.Tag == "A" {
|
|
|
|
- firstEdbInfoId = v.EdbInfoId
|
|
|
|
- lenData := len(v.Data)
|
|
|
|
- if lenData <= 0 {
|
|
|
|
- err = errors.New("A列不能为空")
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- index := 0
|
|
|
|
- if reqData.Sort == 1 {
|
|
|
|
-
|
|
|
|
- index = lenData - 1
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- startDate = v.Data[index].DataTime
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- for _, data := range v.Data {
|
|
|
|
- firstDateMap[data.DataTime] = data.DataTime
|
|
|
|
-
|
|
|
|
- if data.DataTimeType == 2 {
|
|
|
|
- manualDateMap[data.DataTime] = data.DataTime
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for _, data := range v.Data {
|
|
|
|
- if data.DataType == 3 || data.DataType == 4 {
|
|
|
|
- tmpManualData := ManualData{
|
|
|
|
- DataType: data.DataType,
|
|
|
|
- DataTime: data.DataTime,
|
|
|
|
- DataTimeType: data.DataTimeType,
|
|
|
|
- ShowValue: data.ShowValue,
|
|
|
|
- Value: data.Value,
|
|
|
|
- EdbInfoId: v.EdbInfoId,
|
|
|
|
- Tag: v.Tag,
|
|
|
|
- RelationEdbInfoList: data.RelationEdbInfoList,
|
|
|
|
- }
|
|
|
|
- if data.DataType == 4 {
|
|
|
|
- tmpManualData.ShowValue = ``
|
|
|
|
- }
|
|
|
|
- manualDataList = append(manualDataList, tmpManualData)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- var num int
|
|
|
|
- removeDate := make([]string, 0)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- {
|
|
|
|
- firstDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- err = tmpErr
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- edbInfo, tmpErr := data_manage.GetEdbInfoById(firstEdbInfoId)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- err = tmpErr
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var firstDataList []*models.EdbDataList
|
|
|
|
- switch edbInfo.EdbInfoType {
|
|
|
|
- case 0:
|
|
|
|
- firstDataList, err = models.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, ``)
|
|
|
|
- case 1:
|
|
|
|
- _, firstDataList, _, _, err, _ = GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
|
|
|
|
- default:
|
|
|
|
- err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- baseDataList := make([]*models.EdbDataList, 0)
|
|
|
|
- for _, data := range firstDataList {
|
|
|
|
- tmpDate := data.DataTime
|
|
|
|
- tmpDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
|
- if tmpErr != nil {
|
|
|
|
- err = tmpErr
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- if tmpDateTime.Before(firstDateTime) {
|
|
|
|
- continue
|
|
|
|
- }
|
|
|
|
- baseDataList = append(baseDataList, data)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- num = len(baseDataList)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- for _, tmpData := range baseDataList {
|
|
|
|
-
|
|
|
|
- if _, ok := firstDateMap[tmpData.DataTime]; !ok {
|
|
|
|
- removeDate = append(removeDate, tmpData.DataTime)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- tableDataConfig.Num = num
|
|
|
|
- tableDataConfig.RemoveDate = removeDate
|
|
|
|
- tableDataConfig.Data = manualDataList
|
|
|
|
- tableDataConfig.TableEdbInfoList = tableEdbInfoList
|
|
|
|
- tableDataConfig.TextRowData = reqData.TextRowData
|
|
|
|
-
|
|
|
|
- return
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
func GetDataByTableDataConfig(tableDataConfig TableDataConfig) (resultResp request.TableDataReq, err error) {
|
|
func GetDataByTableDataConfig(tableDataConfig TableDataConfig) (resultResp request.TableDataReq, err error) {
|
|
|
|
|
|
if len(tableDataConfig.EdbInfoIdList) <= 0 {
|
|
if len(tableDataConfig.EdbInfoIdList) <= 0 {
|
|
@@ -567,13 +192,23 @@ func GetDataByTableDataConfig(tableDataConfig TableDataConfig) (resultResp reque
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- if _, ok = edbInfoIdDateData[tmpDate]; !ok {
|
|
+ tmpManualData, ok := edbInfoIdDateData[tmpDate]
|
|
|
|
+ if !ok {
|
|
edbInfoIdDateData[tmpDate] = request.ManualDataReq{
|
|
edbInfoIdDateData[tmpDate] = request.ManualDataReq{
|
|
DataType: v.DataType,
|
|
DataType: v.DataType,
|
|
DataTime: v.DataTime,
|
|
DataTime: v.DataTime,
|
|
ShowValue: v.ShowValue,
|
|
ShowValue: v.ShowValue,
|
|
Value: v.Value,
|
|
Value: v.Value,
|
|
}
|
|
}
|
|
|
|
+ } else {
|
|
|
|
+ if (tmpManualData.DataType == 3 || tmpManualData.DataType == 4) && tmpManualData.ShowValue == `` {
|
|
|
|
+ tmpManualData.DataType = v.DataType
|
|
|
|
+ tmpManualData.ShowValue = v.ShowValue
|
|
|
|
+ tmpManualData.Value = v.Value
|
|
|
|
+ tmpManualData.RelationEdbInfoList = v.RelationEdbInfoList
|
|
|
|
+
|
|
|
|
+ edbInfoIdDateData[tmpDate] = tmpManualData
|
|
|
|
+ }
|
|
}
|
|
}
|
|
edbInfoIdDateDataMap[v.EdbInfoId] = edbInfoIdDateData
|
|
edbInfoIdDateDataMap[v.EdbInfoId] = edbInfoIdDateData
|
|
}
|
|
}
|
|
@@ -612,17 +247,23 @@ func GetDataByTableDataConfig(tableDataConfig TableDataConfig) (resultResp reque
|
|
EdbInfoId: tableEdbInfo.EdbInfoId,
|
|
EdbInfoId: tableEdbInfo.EdbInfoId,
|
|
Tag: tableEdbInfo.Tag,
|
|
Tag: tableEdbInfo.Tag,
|
|
EdbName: tableEdbInfo.EdbName,
|
|
EdbName: tableEdbInfo.EdbName,
|
|
|
|
+ EdbNameEn: tableEdbInfo.EdbNameEn,
|
|
EdbAliasName: tableEdbInfo.EdbAliasName,
|
|
EdbAliasName: tableEdbInfo.EdbAliasName,
|
|
Frequency: tableEdbInfo.Frequency,
|
|
Frequency: tableEdbInfo.Frequency,
|
|
Unit: tableEdbInfo.Unit,
|
|
Unit: tableEdbInfo.Unit,
|
|
|
|
+ UnitEn: tableEdbInfo.UnitEn,
|
|
Data: manualDataReqList,
|
|
Data: manualDataReqList,
|
|
}
|
|
}
|
|
|
|
|
|
edbInfo, ok := edbInfoMap[tableEdbInfo.EdbInfoId]
|
|
edbInfo, ok := edbInfoMap[tableEdbInfo.EdbInfoId]
|
|
if ok {
|
|
if ok {
|
|
tmpEdbInfoData.EdbName = edbInfo.EdbName
|
|
tmpEdbInfoData.EdbName = edbInfo.EdbName
|
|
|
|
+ tmpEdbInfoData.EdbNameEn = edbInfo.EdbNameEn
|
|
tmpEdbInfoData.Frequency = edbInfo.Frequency
|
|
tmpEdbInfoData.Frequency = edbInfo.Frequency
|
|
tmpEdbInfoData.Unit = edbInfo.Unit
|
|
tmpEdbInfoData.Unit = edbInfo.Unit
|
|
|
|
+ tmpEdbInfoData.UnitEn = edbInfo.UnitEn
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
for index, dateTime := range sortDateTimeList {
|
|
for index, dateTime := range sortDateTimeList {
|
|
@@ -667,6 +308,28 @@ func GetDataByTableDataConfig(tableDataConfig TableDataConfig) (resultResp reque
|
|
data = append(data, tmpEdbInfoData)
|
|
data = append(data, tmpEdbInfoData)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ for _, d := range data {
|
|
|
|
+ for k2, d2 := range d.Data {
|
|
|
|
+
|
|
|
|
+ vf, e := strconv.ParseFloat(d2.ShowValue, 64)
|
|
|
|
+ if e != nil {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ d.Data[k2].ShowValue = utils.FormatTableDataShowValue(vf)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for _, d := range textRowListDataResp {
|
|
|
|
+ for k2, d2 := range d {
|
|
|
|
+
|
|
|
|
+ vf, e := strconv.ParseFloat(d2.ShowValue, 64)
|
|
|
|
+ if e != nil {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ d[k2].ShowValue = utils.FormatTableDataShowValue(vf)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
resultResp = request.TableDataReq{
|
|
resultResp = request.TableDataReq{
|
|
EdbInfoIdList: edbInfoIdList,
|
|
EdbInfoIdList: edbInfoIdList,
|
|
Sort: tableDataConfig.Sort,
|
|
Sort: tableDataConfig.Sort,
|
|
@@ -677,9 +340,159 @@ func GetDataByTableDataConfig(tableDataConfig TableDataConfig) (resultResp reque
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+func GetTableDataConfig(reqData request.TableDataReq) (tableDataConfig TableDataConfig, err error) {
|
|
|
|
+
|
|
|
|
+ tableDataConfig.EdbInfoIdList = reqData.EdbInfoIdList
|
|
|
|
+ tableDataConfig.Sort = reqData.Sort
|
|
|
|
+
|
|
|
|
+ if len(reqData.Data) <= 0 {
|
|
|
|
+ err = errors.New("数据不能为空")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ var startDate string
|
|
|
|
+
|
|
|
|
+ var firstEdbInfoId int
|
|
|
|
+
|
|
|
|
+ manualDataList := make([]ManualData, 0)
|
|
|
|
+
|
|
|
|
+ tableEdbInfoList := make([]TableEdbInfo, 0)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ firstDateMap := make(map[string]string)
|
|
|
|
+ manualDateMap := make(map[string]string)
|
|
|
|
+
|
|
|
|
+ for _, v := range reqData.Data {
|
|
|
|
+
|
|
|
|
+ tmpTableEdbInfo := TableEdbInfo{
|
|
|
|
+ EdbInfoId: v.EdbInfoId,
|
|
|
|
+ Tag: v.Tag,
|
|
|
|
+ EdbName: v.EdbName,
|
|
|
|
+ EdbNameEn: v.EdbNameEn,
|
|
|
|
+ EdbAliasName: v.EdbAliasName,
|
|
|
|
+ Frequency: v.Frequency,
|
|
|
|
+ Unit: v.Unit,
|
|
|
|
+ UnitEn: v.UnitEn,
|
|
|
|
+ }
|
|
|
|
+ tableEdbInfoList = append(tableEdbInfoList, tmpTableEdbInfo)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if v.Tag == "A" {
|
|
|
|
+ firstEdbInfoId = v.EdbInfoId
|
|
|
|
+ lenData := len(v.Data)
|
|
|
|
+ if lenData <= 0 {
|
|
|
|
+ err = errors.New("A列不能为空")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ index := 0
|
|
|
|
+ if reqData.Sort == 1 {
|
|
|
|
+
|
|
|
|
+ index = lenData - 1
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ startDate = v.Data[index].DataTime
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for _, data := range v.Data {
|
|
|
|
+ firstDateMap[data.DataTime] = data.DataTime
|
|
|
|
+
|
|
|
|
+ if data.DataTimeType == 2 {
|
|
|
|
+ manualDateMap[data.DataTime] = data.DataTime
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for _, data := range v.Data {
|
|
|
|
+ if data.DataType == 3 || data.DataType == 4 {
|
|
|
|
+ tmpManualData := ManualData{
|
|
|
|
+ DataType: data.DataType,
|
|
|
|
+ DataTime: data.DataTime,
|
|
|
|
+ DataTimeType: data.DataTimeType,
|
|
|
|
+ ShowValue: data.ShowValue,
|
|
|
|
+ Value: data.Value,
|
|
|
|
+ EdbInfoId: v.EdbInfoId,
|
|
|
|
+ Tag: v.Tag,
|
|
|
|
+ RelationEdbInfoList: data.RelationEdbInfoList,
|
|
|
|
+ }
|
|
|
|
+ if data.DataType == 4 {
|
|
|
|
+ tmpManualData.ShowValue = ``
|
|
|
|
+ }
|
|
|
|
+ manualDataList = append(manualDataList, tmpManualData)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ num := len(reqData.Data[0].Data)
|
|
|
|
+
|
|
|
|
+ removeDate := make([]string, 0)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ {
|
|
|
|
+ firstDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
|
+ if tmpErr != nil {
|
|
|
|
+ err = tmpErr
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ edbInfo, tmpErr := data_manage.GetEdbInfoById(firstEdbInfoId)
|
|
|
|
+ if tmpErr != nil {
|
|
|
|
+ err = tmpErr
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var firstDataList []*models.EdbDataList
|
|
|
|
+ switch edbInfo.EdbInfoType {
|
|
|
|
+ case 0:
|
|
|
|
+ firstDataList, err = models.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, ``)
|
|
|
|
+ case 1:
|
|
|
|
+ _, firstDataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
|
|
|
|
+ default:
|
|
|
|
+ err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
|
|
|
|
+ }
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ baseDataList := make([]*models.EdbDataList, 0)
|
|
|
|
+ for _, data := range firstDataList {
|
|
|
|
+ tmpDate := data.DataTime
|
|
|
|
+ tmpDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
|
+ if tmpErr != nil {
|
|
|
|
+ err = tmpErr
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if tmpDateTime.Before(firstDateTime) {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ baseDataList = append(baseDataList, data)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for _, tmpData := range baseDataList {
|
|
|
|
+
|
|
|
|
+ if _, ok := firstDateMap[tmpData.DataTime]; !ok {
|
|
|
|
+ removeDate = append(removeDate, tmpData.DataTime)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ tableDataConfig.Num = num
|
|
|
|
+ tableDataConfig.RemoveDate = removeDate
|
|
|
|
+ tableDataConfig.Data = manualDataList
|
|
|
|
+ tableDataConfig.TableEdbInfoList = tableEdbInfoList
|
|
|
|
+ tableDataConfig.TextRowData = reqData.TextRowData
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
func handleTable(tagEdbInfoIdMap map[string]int, lastRealDateTime time.Time, sortDateTimeList []time.Time, edbInfoIdDateDataMap map[int]map[string]request.ManualDataReq, manualDataList []ManualData, textRowData [][]request.ManualDataReq) (tableDataMap map[int]map[string]request.ManualDataReq, textRowListDataResp [][]request.ManualDataReq) {
|
|
func handleTable(tagEdbInfoIdMap map[string]int, lastRealDateTime time.Time, sortDateTimeList []time.Time, edbInfoIdDateDataMap map[int]map[string]request.ManualDataReq, manualDataList []ManualData, textRowData [][]request.ManualDataReq) (tableDataMap map[int]map[string]request.ManualDataReq, textRowListDataResp [][]request.ManualDataReq) {
|
|
tagList := make([]string, 0)
|
|
tagList := make([]string, 0)
|
|
- for tag := range tagEdbInfoIdMap {
|
|
+ for tag, _ := range tagEdbInfoIdMap {
|
|
tagList = append(tagList, tag)
|
|
tagList = append(tagList, tag)
|
|
}
|
|
}
|
|
sort.Strings(tagList)
|
|
sort.Strings(tagList)
|
|
@@ -890,7 +703,7 @@ func handleTable(tagEdbInfoIdMap map[string]int, lastRealDateTime time.Time, sor
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
|
|
- for colIndex := range textRow {
|
|
+ for colIndex, _ := range textRow {
|
|
currTag := tagList[colIndex]
|
|
currTag := tagList[colIndex]
|
|
|
|
|
|
colData, ok := rowDataMap[currTag]
|
|
colData, ok := rowDataMap[currTag]
|