|
@@ -216,7 +216,7 @@ func GetExcelInfoOpButton(sysUser *system.Admin, belongUserId, source int, haveO
|
|
|
}
|
|
|
|
|
|
// GetFirstEdbDataList 获取第一列的数据
|
|
|
-func GetFirstEdbDataList(edbInfo *data_manage.EdbInfo, num int, manualDateList []string) (resultDataList []request.ManualDataReq, err error) {
|
|
|
+func GetFirstEdbDataList(edbInfo *data_manage.EdbInfo, num int, manualDateList []string, decimal int) (resultDataList []request.ManualDataReq, err error) {
|
|
|
var dataList []*data_manage.EdbDataList
|
|
|
switch edbInfo.EdbInfoType {
|
|
|
case 0:
|
|
@@ -289,6 +289,7 @@ func GetFirstEdbDataList(edbInfo *data_manage.EdbInfo, num int, manualDateList [
|
|
|
DataTime: dataList[lenData-i].DataTime,
|
|
|
ShowValue: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
Value: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
+ Decimal: decimal,
|
|
|
DataTimeType: 1,
|
|
|
})
|
|
|
}
|
|
@@ -297,7 +298,7 @@ func GetFirstEdbDataList(edbInfo *data_manage.EdbInfo, num int, manualDateList [
|
|
|
}
|
|
|
|
|
|
// PadFirstEdbDataList 补齐第一列的数据
|
|
|
-func PadFirstEdbDataList(resultDataList []request.ManualDataReq, dateList []string, sortType string) []request.ManualDataReq {
|
|
|
+func PadFirstEdbDataList(resultDataList []request.ManualDataReq, dateList []string, sortType string, decimal int) []request.ManualDataReq {
|
|
|
originDataNum := len(resultDataList)
|
|
|
requsetDateNum := len(dateList)
|
|
|
if originDataNum >= requsetDateNum {
|
|
@@ -309,6 +310,7 @@ func PadFirstEdbDataList(resultDataList []request.ManualDataReq, dateList []stri
|
|
|
resultDataList = append(resultDataList, request.ManualDataReq{
|
|
|
DataType: 0,
|
|
|
DataTime: dateList[originDataNum+i],
|
|
|
+ Decimal: decimal,
|
|
|
ShowValue: ``,
|
|
|
Value: ``,
|
|
|
DataTimeType: 1,
|
|
@@ -320,6 +322,7 @@ func PadFirstEdbDataList(resultDataList []request.ManualDataReq, dateList []stri
|
|
|
tmpDateList = append(tmpDateList, request.ManualDataReq{
|
|
|
DataType: 0,
|
|
|
DataTime: dateList[originDataNum+i],
|
|
|
+ Decimal: decimal,
|
|
|
ShowValue: ``,
|
|
|
Value: ``,
|
|
|
DataTimeType: 1,
|
|
@@ -331,8 +334,123 @@ func PadFirstEdbDataList(resultDataList []request.ManualDataReq, dateList []stri
|
|
|
return resultDataList
|
|
|
}
|
|
|
|
|
|
+// GetOtherEdbDataListFollowDate 获取其他列的数据,并设置日期的小数位数
|
|
|
+func GetOtherEdbDataListFollowDate(edbInfo *data_manage.EdbInfo, dateList []string, dateDecimal map[string]int) (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 []*data_manage.EdbDataList
|
|
|
+ switch edbInfo.EdbInfoType {
|
|
|
+ case 0:
|
|
|
+ dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, ``, ``)
|
|
|
+ case 1:
|
|
|
+ _, dataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(edbInfo.EdbInfoId, ``, ``, false)
|
|
|
+ default:
|
|
|
+ err = errors.New(fmt.Sprint("获取失败,指标类型异常", edbInfo.EdbInfoType))
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取日期内的数据(包含开始日期前一个日期,以及 结束日期后一个日期,目的为了做空日期时的 插值法兼容)
|
|
|
+ baseDataList := make([]*data_manage.EdbDataList, 0)
|
|
|
+ var lastData *data_manage.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
|
|
|
+ }
|
|
|
+
|
|
|
+ // 实际数据的日期map
|
|
|
+ realValMap := make(map[string]string)
|
|
|
+ for _, v := range baseDataList {
|
|
|
+ realValMap[v.DataTime] = v.DataTime
|
|
|
+ }
|
|
|
+
|
|
|
+ // 插值法处理
|
|
|
+ handleDataMap := make(map[string]float64)
|
|
|
+ err = data.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
|
|
|
+ }
|
|
|
+ tmpData := request.ManualDataReq{
|
|
|
+ DataType: dataType,
|
|
|
+ DataTime: date,
|
|
|
+ ShowValue: showValue,
|
|
|
+ Value: value,
|
|
|
+ }
|
|
|
+ if v, ok := dateDecimal[date]; ok {
|
|
|
+ tmpData.Decimal = v
|
|
|
+ } else {
|
|
|
+ tmpData.Decimal = -1
|
|
|
+ }
|
|
|
+ resultDataList = append(resultDataList, tmpData)
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
// GetOtherEdbDataList 获取其他列的数据
|
|
|
-func GetOtherEdbDataList(edbInfo *data_manage.EdbInfo, dateList []string) (resultDataList []request.ManualDataReq, err error) {
|
|
|
+func GetOtherEdbDataList(edbInfo *data_manage.EdbInfo, dateList []string, decimal int) (resultDataList []request.ManualDataReq, err error) {
|
|
|
lenDate := len(dateList)
|
|
|
if lenDate <= 0 {
|
|
|
return
|
|
@@ -432,6 +550,7 @@ func GetOtherEdbDataList(edbInfo *data_manage.EdbInfo, dateList []string) (resul
|
|
|
resultDataList = append(resultDataList, request.ManualDataReq{
|
|
|
DataType: dataType,
|
|
|
DataTime: date,
|
|
|
+ Decimal: decimal,
|
|
|
ShowValue: showValue,
|
|
|
Value: value,
|
|
|
})
|
|
@@ -441,7 +560,7 @@ func GetOtherEdbDataList(edbInfo *data_manage.EdbInfo, dateList []string) (resul
|
|
|
}
|
|
|
|
|
|
// GetFirstHistoryEdbDataList 获取指标的历史的数据
|
|
|
-func GetFirstHistoryEdbDataList(edbInfo *data_manage.EdbInfo, num int, endDate string) (resultDataList []request.ManualDataReq, err error) {
|
|
|
+func GetFirstHistoryEdbDataList(edbInfo *data_manage.EdbInfo, num int, endDate string, decimal int) (resultDataList []request.ManualDataReq, err error) {
|
|
|
endDateTime, err := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
|
|
|
if err != nil {
|
|
|
return
|
|
@@ -490,6 +609,7 @@ func GetFirstHistoryEdbDataList(edbInfo *data_manage.EdbInfo, num int, endDate s
|
|
|
resultDataList = append(resultDataList, request.ManualDataReq{
|
|
|
DataType: dataType,
|
|
|
DataTime: dataList[lenData-i].DataTime,
|
|
|
+ Decimal: decimal,
|
|
|
ShowValue: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
Value: fmt.Sprint(dataList[lenData-i].Value),
|
|
|
})
|