|
@@ -15,6 +15,8 @@ import (
|
|
|
etaTrialService "eta/eta_api/services/eta_trial"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
+ "github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "github.com/shopspring/decimal"
|
|
|
"os"
|
|
|
"os/exec"
|
|
|
"sort"
|
|
@@ -1426,6 +1428,99 @@ func (this *ChartInfoController) PreviewChartInfoDetail() {
|
|
|
chartInfo.ChartSource = strings.Join(sourceNameList, ",")
|
|
|
chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
|
|
|
|
|
|
+ // 标识线计算
|
|
|
+ if req.MarkersLines != "" {
|
|
|
+ markerLines := make([]data_manage.MarkersLine, 0)
|
|
|
+ err = json.Unmarshal([]byte(req.MarkersLines), &markerLines)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "标识线配置异常"
|
|
|
+ br.ErrMsg = "标识线配置异常"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for i := range markerLines {
|
|
|
+ if markerLines[i].Calculation == 1 {
|
|
|
+ // 区间均值
|
|
|
+ averge := 0.0
|
|
|
+ for _, v := range edbList {
|
|
|
+ if v.IsAxis == 1{
|
|
|
+ // 计算左轴
|
|
|
+ if chartInfo.ChartType == 2 && markerLines[i].EdbType == 0 {
|
|
|
+ //季节性图结构体不一样
|
|
|
+ quarterDataList := v.DataList.(data_manage.QuarterDataList)
|
|
|
+ for _, quarterData := range quarterDataList[len(quarterDataList) - 1:] {
|
|
|
+ for _, vv := range quarterData.DataList {
|
|
|
+ averge += vv.Value
|
|
|
+ }
|
|
|
+ averge = averge / float64(len(quarterData.DataList))
|
|
|
+ markerLines[i].Value = fmt.Sprintf("%.2f", averge)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ dataList := v.DataList.([]*data_manage.EdbDataList)
|
|
|
+ for _, dataItem := range dataList {
|
|
|
+ averge += dataItem.Value
|
|
|
+ }
|
|
|
+ averge = averge / float64(len(dataList))
|
|
|
+
|
|
|
+ markerLines[i].Value = fmt.Sprintf("%.2f", averge)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if markerLines[i].Calculation == 2 {
|
|
|
+ // 区间均值加N倍标准差
|
|
|
+ averge := 0.0
|
|
|
+
|
|
|
+ for _, v := range edbList {
|
|
|
+ if v.IsAxis == 1{
|
|
|
+ // 计算左轴
|
|
|
+ if chartInfo.ChartType == 2 && markerLines[i].EdbType == 0 {
|
|
|
+ //季节性图结构体不一样
|
|
|
+ dataList := make([]float64,0)
|
|
|
+ quarterDataList := v.DataList.(data_manage.QuarterDataList)
|
|
|
+ for _, quarterData := range quarterDataList[len(quarterDataList) - 1:] {
|
|
|
+ for _, vv := range quarterData.DataList {
|
|
|
+ dataList = append(dataList, vv.Value)
|
|
|
+ averge += vv.Value
|
|
|
+ }
|
|
|
+ averge = averge / float64(len(quarterData.DataList))
|
|
|
+ stdev := utils.CalculateStandardDeviation(dataList)
|
|
|
+ stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
|
|
|
+
|
|
|
+ markerLines[i].Value = fmt.Sprintf("%.2f", averge + stdev * float64(markerLines[i].CalculationValue))
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ dataList := v.DataList.([]*data_manage.EdbDataList)
|
|
|
+ floatList := make([]float64,0)
|
|
|
+ for _, dataItem := range dataList {
|
|
|
+ floatList = append(floatList, dataItem.Value)
|
|
|
+ averge += dataItem.Value
|
|
|
+ }
|
|
|
+ averge = averge / float64(len(dataList))
|
|
|
+
|
|
|
+ stdev := utils.CalculateStandardDeviation(floatList)
|
|
|
+ stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
|
|
|
+
|
|
|
+ markerLines[i].Value = fmt.Sprintf("%.2f", averge + stdev * float64(markerLines[i].CalculationValue))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if markerLines[i].Calculation == 3 {
|
|
|
+ // 区间分位
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ markerLineStr, err := json.Marshal(markerLines)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "标识线配置异常"
|
|
|
+ br.ErrMsg = "标识线配置异常"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ chartInfo.MarkersLines = string(markerLineStr)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
resp := new(data_manage.ChartInfoDetailResp)
|
|
|
resp.ChartInfo = chartInfo
|
|
|
resp.EdbInfoList = edbList
|