Преглед на файлове

Merge branch 'debug' of http://8.136.199.33:3000/eta_server/eta_api into debug

kobe6258 преди 6 дни
родител
ревизия
8becd3f3f1
променени са 4 файла, в които са добавени 112 реда и са изтрити 78 реда
  1. 12 40
      controllers/data_manage/chart_info.go
  2. 78 7
      services/data/chart_info.go
  3. 7 7
      services/data/predict_edb_info_rule.go
  4. 15 24
      services/websocket_msg.go

+ 12 - 40
controllers/data_manage/chart_info.go

@@ -1501,47 +1501,19 @@ func (this *ChartInfoController) PreviewChartInfoDetail() {
 			br.ErrMsg = "标识线配置异常" + err.Error()
 			return
 		}
-		for i := range markerLines {
-			if markerLines[i].EdbType == 0 && markerLines[i].TimeIntervalType == 0 && markerLines[i].Axis != 3 {
-				// 图上第一个指标且时间区间跟随图表
-				if markerLines[i].MarkLineType == 2 {
-					if edbList[0].IsAxis == 1 {
-						value, err := data.MarkerLineCalculate(markerLines[i], edbList[0].DataList, chartInfo)
-						if err != nil {
-							br.Msg = "标识线配置异常"
-							br.ErrMsg = "标识线配置异常" + err.Error()
-							return
-						}
-						markerLines[i].Value = value
-					} else {
-						// 其他的都走指标计算
-						edbInfo, err := data_manage.GetEdbInfoById(markerLines[i].EdbInfoId)
-						if err != nil {
-							br.Msg = "指标计算标识线获取指标信息异常"
-							br.ErrMsg = "指标计算标识线获取指标信息异常" + err.Error()
-							return
-						}
-						// 判断时间区间不为跟随图表的情况
-						if markerLines[i].TimeIntervalType != 0 {
-							startDate = markerLines[i].StartDate.Date
-							endDate = markerLines[i].EndDate.Date
-						}
-						dataList, err := data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, startDate, endDate)
-						if err != nil {
-							br.Msg = "指标计算标识线获取指标数据异常"
-							br.ErrMsg = "指标计算标识线获取指标数据异常" + err.Error()
-							return
-						}
-						value, err := data.MarkerLineCalculate(markerLines[i], dataList, chartInfo)
-						if err != nil {
-							br.Msg = "标识线配置异常"
-							br.ErrMsg = "标识线配置异常" + err.Error()
-							return
-						}
-						markerLines[i].Value = value
-					}
+		for i, markerLine := range markerLines {
+			switch markerLine.MarkLineType { //1:固定 2:指标计算
+			case 2:
+				tmpMarkerLine, tmpErr := data.GetMarkerLine(markerLine, edbList, chartInfo, startDate, endDate)
+				if tmpErr != nil {
+					br.Msg = "标识线配置异常"
+					br.ErrMsg = "标识线配置异常," + tmpErr.Error()
+					return
 				}
+				markerLine = tmpMarkerLine
 			}
+
+			markerLines[i] = markerLine
 		}
 
 		markerLineStr, err := json.Marshal(markerLines)
@@ -3626,7 +3598,7 @@ func (this *ChartInfoController) PreviewBarChartInfo() {
 						value, err := data.MarkerLineCalculate(markerLines[i], edbList[0].DataList, chartInfo)
 						if err != nil {
 							br.Msg = "标识线配置异常"
-							br.ErrMsg = "标识线配置异常" + err.Error()
+							br.ErrMsg = "标识线配置异常," + err.Error()
 							return
 						}
 						markerLines[i].Value = value

+ 78 - 7
services/data/chart_info.go

@@ -4520,8 +4520,10 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 						length += 1
 					}
 				}
-				averge = averge / float64(length)
-				value = fmt.Sprintf("%.2f", averge)
+				if length > 0 {
+					averge = averge / float64(length)
+					value = fmt.Sprintf("%.2f", averge)
+				}
 			}
 		} else {
 			dataList := dataList.([]*data_manage.EdbDataList)
@@ -4563,9 +4565,11 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 					length += 1
 				}
 			}
-			averge = averge / float64(length)
+			if length > 0 {
+				averge = averge / float64(length)
+				value = fmt.Sprintf("%.2f", averge)
+			}
 
-			value = fmt.Sprintf("%.2f", averge)
 		}
 	} else if markerLine.Calculation == 2 {
 		// 区间均值加N倍标准差
@@ -4617,7 +4621,10 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 						length += 1
 					}
 				}
-				averge = averge / float64(length)
+
+				if length > 0 {
+					averge = averge / float64(length)
+				}
 				if len(faloatList) <= 0 {
 					err = errors.New(`数据为空`)
 					return
@@ -4671,8 +4678,9 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 					length += 1
 				}
 			}
-			averge = averge / float64(length)
-
+			if length > 0 {
+				averge = averge / float64(length)
+			}
 			if len(floatList) <= 0 {
 				err = errors.New(`数据为空`)
 				return
@@ -5365,3 +5373,66 @@ func getEdbDataMapListForSeason(chartInfoId, chartType int, calendar, startDate,
 
 	return
 }
+
+// GetMarkerLine
+// @Description: 获取标识线
+// @author: Roc
+// @datetime 2025-05-16 18:42:59
+// @param markerLine data_manage.MarkersLine
+// @param edbList []*data_manage.ChartEdbInfoMapping
+// @param chartInfo *data_manage.ChartInfoView
+// @param startDate string
+// @param endDate string
+// @return newMarkerLine data_manage.MarkersLine
+// @return err error
+func GetMarkerLine(markerLine data_manage.MarkersLine, edbList []*data_manage.ChartEdbInfoMapping, chartInfo *data_manage.ChartInfoView, startDate, endDate string) (newMarkerLine data_manage.MarkersLine, err error) {
+	newMarkerLine = markerLine
+
+	// 如果是横轴,那么直接返回
+	if markerLine.Axis == 3 {
+		return
+	}
+
+	var dataList interface{}
+	switch markerLine.EdbType {
+	case 0: // 图中第一个指标
+		dataList = edbList[0].DataList
+
+	case 1: // 其他指标
+		edbInfo, tmpErr := data_manage.GetEdbInfoById(markerLine.EdbInfoId)
+		if tmpErr != nil {
+			err = fmt.Errorf("指标计算标识线获取指标信息异常" + tmpErr.Error())
+			return
+		}
+		// 判断时间区间不为跟随图表的情况
+		if markerLine.TimeIntervalType != 0 {
+			startDate = markerLine.StartDate.Date
+			endDate = markerLine.EndDate.Date
+		}
+		dataList, err = data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, startDate, endDate)
+		if err != nil {
+			err = fmt.Errorf("指标计算标识线获取指标数据异常" + err.Error())
+			return
+		}
+	}
+
+	switch markerLine.TimeIntervalType {
+	// 0跟随图表 1自定义
+	case 0: // 0跟随图表
+		value, tmpErr := MarkerLineCalculate(markerLine, dataList, chartInfo)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		newMarkerLine.Value = value
+	case 1: // 自定义
+		value, tmpErr := MarkerLineCalculate(markerLine, dataList, chartInfo)
+		if tmpErr != nil {
+			err = fmt.Errorf("标识线配置异常" + err.Error())
+			return
+		}
+		newMarkerLine.Value = value
+	}
+
+	return
+}

+ 7 - 7
services/data/predict_edb_info_rule.go

@@ -778,19 +778,19 @@ func GetChartPredictEdbInfoDataListByRuleSeason(edbInfoId int, configValue strin
 		tmpLenAllDataList := len(allDataList)
 		tmpK := tmpLenAllDataList - 1    //上1期数据的下标
 		lastDayData := allDataList[tmpK] // 上1期的数据
-		lastDayStr := lastDayData.DataTime
+		//lastDayStr := lastDayData.DataTime
 		lastDayVal := lastDayData.Value
-		lastDay, tmpErr := time.ParseInLocation(utils.FormatDate, lastDayStr, time.Local)
-		if tmpErr != nil {
-			err = errors.New("获取上期日期转换失败:" + tmpErr.Error())
-		}
+		//lastDay, tmpErr := time.ParseInLocation(utils.FormatDate, lastDayStr, time.Local)
+		//if tmpErr != nil {
+		//	err = errors.New("获取上期日期转换失败:" + tmpErr.Error())
+		//}
 		for _, year := range yearList {
 			moveDay := moveDayMap[year] //需要移动的天数
 			var tmpHistoryCurrentVal, tmpHistoryLastVal float64
 			var isFindHistoryCurrent, isFindHistoryLast bool //是否找到前几年的数据
 
 			//前几年当日的日期
-			tmpHistoryCurrentDate := currentDate.AddDate(year-currentDate.Year(), 0, -moveDay)
+			tmpHistoryCurrentDate := currentDate.AddDate(year-currentDate.Year(), 0, -(moveDay + 1))
 			for i := 0; i <= 35; i++ { // 前后35天找数据,找到最近的值,先向后面找,再往前面找
 				tmpDate := tmpHistoryCurrentDate.AddDate(0, 0, i)
 				if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
@@ -808,7 +808,7 @@ func GetChartPredictEdbInfoDataListByRuleSeason(edbInfoId int, configValue strin
 			}
 
 			//前几年上一期的日期
-			tmpHistoryLastDate := lastDay.AddDate(year-lastDay.Year(), 0, -moveDay)
+			tmpHistoryLastDate := tmpHistoryCurrentDate.AddDate(0, 0, -1)
 			for i := 0; i <= 35; i++ { // 前后35天找数据,找到最近的值,先向后面找,再往前面找
 				tmpDate := tmpHistoryLastDate.AddDate(0, 0, i)
 				if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {

+ 15 - 24
services/websocket_msg.go

@@ -171,15 +171,17 @@ func DealEdbInspectionMessageTest(adminId int) {
 	if err != nil {
 		utils.FileLog.Error("获取巡检信息历史失败,err:%s, adminId:%d", err.Error(), adminId)
 	}
-	success := make(chan int64, 10)
+	if len(messageList) == 0 {
+		return
+	}
 	go func() {
-		defer close(success)
-		for i, msg := range messageList {
-			if i == 0 {
+		readList := make([]int64, 0)
+		for _, msg := range messageList {
 				// 多条消息仅发送最新一条
 				respData, err := data.SendInspectionMessages(adminId, msg)
 				if err != nil {
 					utils.FileLog.Error("巡检信息发送失败,err:%s, adminId:%d", err.Error(), adminId)
+					return
 				} else {
 					resp := models.WebsocketMessageResponse{
 						MessageType: 1,
@@ -193,28 +195,17 @@ func DealEdbInspectionMessageTest(adminId int) {
 					err = conn.WriteJSON(resp)
 					if err != nil {
 						utils.FileLog.Error("巡检信息发送失败,err:%s, adminId:%d", err.Error(), adminId)
-						} else {
-							utils.FileLog.Info("巡检信息发送成功,adminId:%d, messageId:%d", adminId, msg.MessageId)
-							success <- msg.MessageId
-						}
+						return
+					} else {
+						utils.FileLog.Info("巡检信息发送成功,adminId:%d, messageId:%d", adminId, msg.MessageId)
 					}
-				} else {
-					success <- msg.MessageId
 				}
+				readList = append(readList, msg.MessageId)
 			}
-	}()
-	go func() {
-		readList := make([]int64, 0)
-		for {
-			msgId, ok := <-success
-			if !ok {
-				break
+			_, err = data.ReadEdbInspectionMessageList(readList, adminId)
+			if err != nil {
+				utils.FileLog.Error("巡检信息已读失败,err:%s, adminId:%d", err.Error(), adminId)
+				return
 			}
-			readList = append(readList, msgId)
-		}
-		_, err = data.ReadEdbInspectionMessageList(readList, adminId)
-		if err != nil {
-			utils.FileLog.Error("巡检信息已读失败,err:%s, adminId:%d", err.Error(), adminId)
-		}
-	}()
+		}()
 }