|
@@ -10,6 +10,8 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+
|
|
|
+
|
|
|
type BaseCalculate struct {
|
|
|
DataList []*EdbInfoSearchData
|
|
|
Frequency string `description:"需要转换的频度"`
|
|
@@ -18,6 +20,12 @@ type BaseCalculate struct {
|
|
|
MoveType int `description:"移动方式:1:领先(默认),2:滞后"`
|
|
|
MoveFrequency string `description:"移动频度"`
|
|
|
FromFrequency string `description:"来源的频度"`
|
|
|
+ Source int `description:"1:累计值转月;2:累计值转季;3:同比值;4:同差值;5:N数值移动平均数计算;6:环比值;7:环差值;8:升频;9:降频;10:时间移位;11:超季节性;12:年化;13:累计值;14:累计值年初至今;15:指数修匀;16:日均值"`
|
|
|
+}
|
|
|
+
|
|
|
+type BaseCalculateResp struct {
|
|
|
+ DataMap map[string]float64
|
|
|
+ DateList []string
|
|
|
}
|
|
|
|
|
|
|
|
@@ -27,8 +35,8 @@ type BaseCalculate struct {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Ljzzy() (dateDataMap map[string]float64, err error) {
|
|
|
- dataList := obj.DataList
|
|
|
+func (obj BaseCalculate) Ljzzy() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
+ dataList := obj.DataList
|
|
|
|
|
|
yearMap := make(map[int]map[int]*EdbInfoSearchData)
|
|
|
dataLen := len(dataList)
|
|
@@ -138,8 +146,8 @@ func (obj BaseCalculate) Ljzzy() (dateDataMap map[string]float64, err error) {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Ljzzj() (dateDataMap map[string]float64, err error) {
|
|
|
- dataList := obj.DataList
|
|
|
+func (obj BaseCalculate) Ljzzj() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
+ dataList := obj.DataList
|
|
|
|
|
|
yearMap := make(map[int]map[int]*EdbInfoSearchData)
|
|
|
dataLen := len(dataList)
|
|
@@ -249,8 +257,8 @@ func (obj BaseCalculate) Ljzzj() (dateDataMap map[string]float64, err error) {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Tbz() (dateDataMap map[string]float64, err error) {
|
|
|
- dataList := obj.DataList
|
|
|
+func (obj BaseCalculate) Tbz() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
+ dataList := obj.DataList
|
|
|
|
|
|
var dateArr []string
|
|
|
dataMap := make(map[string]*EdbInfoSearchData)
|
|
@@ -361,8 +369,8 @@ func tbzDiv(a, b float64) float64 {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Tcz() (dateDataMap map[string]float64, err error) {
|
|
|
- dataList := obj.DataList
|
|
|
+func (obj BaseCalculate) Tcz() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
+ dataList := obj.DataList
|
|
|
|
|
|
var dateArr []string
|
|
|
dataMap := make(map[string]*EdbInfoSearchData)
|
|
@@ -460,7 +468,7 @@ func tczSub(a, b float64) float64 {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Nszydpjjs() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Nszydpjjs() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
fromDataList := obj.DataList
|
|
|
formulaInt := obj.Formula.(int)
|
|
|
|
|
@@ -520,7 +528,7 @@ func (obj BaseCalculate) Nszydpjjs() (dateDataMap map[string]float64, err error)
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Hbz() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Hbz() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
formulaInt := obj.Formula.(int)
|
|
|
|
|
@@ -589,7 +597,7 @@ func hbzDiv(current, pre float64) (val float64, ok bool) {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Hcz() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Hcz() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
formulaInt := obj.Formula.(int)
|
|
|
|
|
@@ -648,7 +656,7 @@ func hczDiv(current, pre float64) float64 {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) UpFrequency() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) UpFrequency() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
|
|
|
|
|
@@ -700,7 +708,7 @@ func (obj BaseCalculate) UpFrequency() (dateDataMap map[string]float64, err erro
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) DownFrequency() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) DownFrequency() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
edbFrequency := obj.Frequency
|
|
|
formula := obj.Formula.(string)
|
|
@@ -860,7 +868,7 @@ func (obj BaseCalculate) DownFrequency() (dateDataMap map[string]float64, err er
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) TimeShift() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) TimeShift() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
formulaInt := obj.Formula.(int)
|
|
|
moveType := obj.MoveType
|
|
@@ -917,7 +925,7 @@ func (obj BaseCalculate) TimeShift() (dateDataMap map[string]float64, err error)
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Cjjx() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Cjjx() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
formulaInt := obj.Formula.(int)
|
|
|
calendar := obj.Calendar
|
|
@@ -1045,7 +1053,7 @@ func cjjxSub(currValue float64, pastValue []float64) (value float64, ok bool) {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Annualized() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Annualized() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
fromDataList := obj.DataList
|
|
|
lenFromDataList := len(fromDataList)
|
|
|
|
|
@@ -1141,7 +1149,7 @@ func (obj BaseCalculate) Annualized() (dateDataMap map[string]float64, err error
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Ljz() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Ljz() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
frequency := obj.Frequency
|
|
|
fromFrequency := obj.FromFrequency
|
|
@@ -1408,7 +1416,7 @@ func (obj BaseCalculate) Ljz() (dateDataMap map[string]float64, err error) {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) LjzNczj() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) LjzNczj() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
frequency := obj.Frequency
|
|
|
fromFrequency := obj.FromFrequency
|
|
@@ -1521,7 +1529,7 @@ func (obj BaseCalculate) LjzNczj() (dateDataMap map[string]float64, err error) {
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) ExponentialSmoothing() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) ExponentialSmoothing() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
formula := obj.Formula.(string)
|
|
|
|
|
@@ -1606,7 +1614,7 @@ func calculateExponentialSmoothingData(dataList []*EdbInfoSearchData, alpha floa
|
|
|
|
|
|
|
|
|
|
|
|
-func (obj BaseCalculate) Rjz() (dateDataMap map[string]float64, err error) {
|
|
|
+func (obj BaseCalculate) Rjz() (dateDataMap map[string]float64, err error, errMsg string) {
|
|
|
dataList := obj.DataList
|
|
|
|
|
|
fromFrequency := obj.FromFrequency
|
|
@@ -1668,3 +1676,51 @@ func rjzDivV2(a float64, b int) (val float64, ok bool) {
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func reverseSlice(slice []*EdbInfoSearchData) []*EdbInfoSearchData {
|
|
|
+ reversed := make([]*EdbInfoSearchData, len(slice))
|
|
|
+ for i, j := 0, len(slice)-1; i < len(slice); i, j = i+1, j-1 {
|
|
|
+ reversed[i] = slice[j]
|
|
|
+ }
|
|
|
+ return reversed
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func reverseSliceByDesc(slice []*EdbInfoSearchData) (newSlice []*EdbInfoSearchData, err error) {
|
|
|
+
|
|
|
+ if len(slice) <= 1 {
|
|
|
+ newSlice = slice
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ startDate, err := time.ParseInLocation(utils.FormatDate, slice[0].DataTime, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ secondDate, err := time.ParseInLocation(utils.FormatDate, slice[1].DataTime, time.Local)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if !secondDate.After(startDate) {
|
|
|
+ newSlice = slice
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ newSlice = make([]*EdbInfoSearchData, len(slice))
|
|
|
+ for i, j := 0, len(slice)-1; i < len(slice); i, j = i+1, j-1 {
|
|
|
+ newSlice[i] = slice[j]
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|