|
@@ -8,6 +8,7 @@ import (
|
|
|
"eta/eta_index_lib/services"
|
|
|
"eta/eta_index_lib/utils"
|
|
|
"fmt"
|
|
|
+ "sort"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
@@ -2362,3 +2363,111 @@ func (this *CalculateController) BatchEditMulti() {
|
|
|
br.Data = resp
|
|
|
br.IsAddLog = true
|
|
|
}
|
|
|
+
|
|
|
+// StepCalculate
|
|
|
+// @Title 多步骤计算
|
|
|
+// @Description 多步骤计算
|
|
|
+// @Param request body models.StepCalculateBySearchData true "type json string"
|
|
|
+// @Success Ret=200 返回指标id
|
|
|
+// @router /base/step_calculate [post]
|
|
|
+func (this *CalculateController) StepCalculate() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req models.StepCalculateBySearchData
|
|
|
+ if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
|
|
|
+ br.Msg = "参数解析异常"
|
|
|
+ br.ErrMsg = fmt.Sprintf("参数解析失败, Err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sort.Slice(req.Calculates, func(i, j int) bool {
|
|
|
+ return req.Calculates[i].Sort < req.Calculates[j].Sort
|
|
|
+ })
|
|
|
+
|
|
|
+ var errMsg string
|
|
|
+ originData, e := models.EdbInfoSearchDataToData(req.DataList)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "基础数据异常"
|
|
|
+ br.ErrMsg = fmt.Sprintf("计算失败, 基础数据异常, Err: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ calculateData := originData
|
|
|
+ dateDataMap := make(map[time.Time]float64)
|
|
|
+ for _, v := range req.Calculates {
|
|
|
+ baseCalculate := models.BaseCalculate{
|
|
|
+ DataList: calculateData,
|
|
|
+ Frequency: v.Frequency,
|
|
|
+ Formula: v.Formula,
|
|
|
+ Calendar: v.Calendar,
|
|
|
+ MoveType: v.MoveType,
|
|
|
+ MoveFrequency: v.MoveFrequency,
|
|
|
+ FromFrequency: v.FromFrequency,
|
|
|
+ Source: v.Source,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算方式
|
|
|
+ switch baseCalculate.Source {
|
|
|
+ case utils.EdbBaseCalculateLjzzy:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Ljzzy()
|
|
|
+ case utils.EdbBaseCalculateLjzzj:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Ljzzj()
|
|
|
+ case utils.EdbBaseCalculateTbz:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Tbz()
|
|
|
+ case utils.EdbBaseCalculateTcz:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Tcz()
|
|
|
+ case utils.EdbBaseCalculateNszydpjjs:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Nszydpjjs()
|
|
|
+ case utils.EdbBaseCalculateHbz:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Hbz()
|
|
|
+ case utils.EdbBaseCalculateHcz:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Hcz()
|
|
|
+ case utils.EdbBaseCalculateUpFrequency:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.UpFrequency()
|
|
|
+ case utils.EdbBaseCalculateDownFrequency:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.DownFrequency()
|
|
|
+ case utils.EdbBaseCalculateTimeShift:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.TimeShift()
|
|
|
+ case utils.EdbBaseCalculateCjjx:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Cjjx()
|
|
|
+ case utils.EdbBaseCalculateAnnualized:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Annualized()
|
|
|
+ case utils.EdbBaseCalculateLjz:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Ljz()
|
|
|
+ case utils.EdbBaseCalculateLjzNczj:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.LjzNczj()
|
|
|
+ case utils.EdbBaseCalculateExponentialSmoothing:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.ExponentialSmoothing()
|
|
|
+ case utils.EdbBaseCalculateRjz:
|
|
|
+ dateDataMap, e, errMsg = baseCalculate.Rjz()
|
|
|
+ default:
|
|
|
+ errMsg = "计算方式无效"
|
|
|
+ e = fmt.Errorf("%s:%d", errMsg, baseCalculate.Source)
|
|
|
+ }
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "计算失败"
|
|
|
+ if errMsg != "" {
|
|
|
+ br.Msg = errMsg
|
|
|
+ }
|
|
|
+ br.ErrMsg = e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ calculateData = models.TransDateData2EdbData(dateDataMap)
|
|
|
+ }
|
|
|
+ resultData, dates := models.GetDateDataAndDateList(dateDataMap)
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "计算成功"
|
|
|
+ br.Data = models.BaseCalculateResp{
|
|
|
+ DataMap: resultData,
|
|
|
+ DateList: dates,
|
|
|
+ }
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|