Browse Source

Merge branch 'feature/eta1.4.6_radar_chart' of eta_server/eta_api into master

xyxie 1 year ago
parent
commit
62d3b15941

+ 117 - 17
controllers/data_manage/chart_info.go

@@ -910,7 +910,7 @@ func (this *ChartInfoController) ChartInfoDetail() {
 			}
 		}
 	}
-	
+
 	// 图表的指标来源
 	sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
 	chartInfo.ChartSource = strings.Join(sourceNameList, ",")
@@ -2512,6 +2512,8 @@ func (this *ChartInfoController) CopyChartInfo() {
 		ExtraConfig:       oldChartInfo.ExtraConfig,
 		SeasonExtraConfig: oldChartInfo.SeasonExtraConfig,
 		StartYear:         oldChartInfo.StartYear,
+		Unit:              oldChartInfo.Unit,
+		UnitEn:            oldChartInfo.UnitEn,
 		ChartThemeId:      oldChartInfo.ChartThemeId,
 		SourcesFrom:       oldChartInfo.SourcesFrom,
 		Instructions:      oldChartInfo.Instructions,
@@ -2533,22 +2535,23 @@ func (this *ChartInfoController) CopyChartInfo() {
 			timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 			mapItem := &data_manage.ChartEdbMapping{
 				//ChartEdbMappingId: 0,
-				ChartInfoId: chartInfo.ChartInfoId,
-				EdbInfoId:   v.EdbInfoId,
-				CreateTime:  time.Now(),
-				ModifyTime:  time.Now(),
-				UniqueCode:  utils.MD5(utils.CHART_PREFIX + "_" + timestamp),
-				MaxData:     v.MaxData,
-				MinData:     v.MinData,
-				IsOrder:     v.IsOrder,
-				IsAxis:      v.IsAxis,
-				EdbInfoType: v.EdbInfoType,
-				LeadValue:   v.LeadValue,
-				LeadUnit:    v.LeadUnit,
-				ChartStyle:  v.ChartStyle,
-				ChartColor:  v.ChartColor,
-				ChartWidth:  v.ChartWidth,
-				Source:      v.Source,
+				ChartInfoId:  chartInfo.ChartInfoId,
+				EdbInfoId:    v.EdbInfoId,
+				CreateTime:   time.Now(),
+				ModifyTime:   time.Now(),
+				UniqueCode:   utils.MD5(utils.CHART_PREFIX + "_" + timestamp),
+				MaxData:      v.MaxData,
+				MinData:      v.MinData,
+				IsOrder:      v.IsOrder,
+				IsAxis:       v.IsAxis,
+				EdbInfoType:  v.EdbInfoType,
+				LeadValue:    v.LeadValue,
+				LeadUnit:     v.LeadUnit,
+				ChartStyle:   v.ChartStyle,
+				ChartColor:   v.ChartColor,
+				ChartWidth:   v.ChartWidth,
+				Source:       v.Source,
+				EdbAliasName: v.EdbAliasName,
 			}
 			mapList = append(mapList, mapItem)
 		}
@@ -3122,3 +3125,100 @@ func (this *EdbInfoController) GetBatchChartRefreshResult() {
 //		data.EsAddOrEditMyChartInfoByChartInfoId(v.ChartInfoId)
 //	}
 //}
+
+// PreviewRadarChartInfo
+// @Title 图表-获取预览的雷达图
+// @Description 图表-获取预览的雷达图
+// @Param	ExtraConfig	body data_manage.PreviewRadarChartReq true "type json string"
+// @Success 200 {object} data_manage.ChartEdbInfoDetailResp
+// @router /chart_info/preview/radar [post]
+func (this *ChartInfoController) PreviewRadarChartInfo() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	var req data_manage.PreviewRadarChartReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	chartInfo := new(data_manage.ChartInfoView)
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	chartType := utils.CHART_TYPE_RADAR
+	if len(req.ChartEdbInfoList) <= 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+
+	edbInfoIdArr := make([]int, 0)
+	edbInfoNameMap := make(map[int]string)
+	for _, v := range req.ChartEdbInfoList {
+		edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
+		edbInfoNameMap[v.EdbInfoId] = v.EdbAliasName
+	}
+	mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIdArr)
+	for _, v := range mappingList {
+		if name, ok := edbInfoNameMap[v.EdbInfoId]; ok {
+			v.EdbAliasName = name
+		}
+	}
+	// 获取图表中的指标数据
+	edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(0, chartType, "", "", "", mappingList, req.ExtraConfig, "")
+	if err != nil {
+		br.Msg = "获取失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
+		return
+	}
+	warnEdbList := make([]string, 0)
+	for _, v := range edbList {
+		if v.IsNullData {
+			warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")")
+		}
+	}
+	if len(warnEdbList) > 0 {
+		chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",")
+	}
+
+	//图表操作权限
+	chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
+	//判断是否需要展示英文标识
+	chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, utils.CHART_SOURCE_DEFAULT, chartType)
+	chartInfo.Button = data_manage.ChartViewButton{
+		IsEdit:    chartInfo.IsEdit,
+		IsEnChart: chartInfo.IsEnChart,
+		IsAdd:     chartInfo.IsAdd,
+		IsCopy:    true,
+		IsSetName: chartInfo.IsSetName,
+	}
+	// 图表的指标来源
+	sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
+	chartInfo.ChartSource = strings.Join(sourceNameList, ",")
+	chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
+
+	resp := new(data_manage.ChartInfoDetailResp)
+	resp.ChartInfo = chartInfo
+	resp.EdbInfoList = edbList
+	resp.XEdbIdValue = xEdbIdValue
+	resp.YDataList = yDataList
+	resp.DataResp = dataResp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 6 - 0
controllers/data_manage/chart_theme.go

@@ -166,6 +166,12 @@ func (c *ChartThemeController) GetThemePreviewData() {
 		edbInfoIdList = []int{9, 10, 11, 12, 13, 14, 15, 16, 17, 18}
 		extraConfigStr = `{"XName":"123","XNameEn":"123","XUnitName":"无","XUnitNameEn":"none","YName":"321","YNameEn":"321","YUnitName":"无","YUnitNameEn":"none","XMinValue":"230","XMaxValue":"395","YMinValue":"380","YMaxValue":"850","SeriesList":[{"Name":"2021-11-21","NameEn":"2021-11-21","IsNameDefault":true,"Color":"","EdbInfoList":[{"XEdbInfoId":9,"YEdbInfoId":14,"Name":"指标1","NameEn":"","XDateType":1,"XDate":"","XDateValue":0,"YDateType":1,"YDate":"","YDateValue":0,"IsShow":false},{"XEdbInfoId":10,"YEdbInfoId":15,"Name":"指标2","NameEn":"指标2","XDateType":1,"XDate":"","XDateValue":0,"YDateType":1,"YDate":"","YDateValue":0,"IsShow":false},{"XEdbInfoId":11,"YEdbInfoId":16,"Name":"指标3","NameEn":"","XDateType":1,"XDate":"","XDateValue":0,"YDateType":1,"YDate":"","YDateValue":0,"IsShow":false},{"XEdbInfoId":12,"YEdbInfoId":17,"Name":"指标4","NameEn":"指标4","XDateType":1,"XDate":"","XDateValue":0,"YDateType":1,"YDate":"","YDateValue":0,"IsShow":false},{"XEdbInfoId":13,"YEdbInfoId":18,"Name":"指标5","NameEn":"","XDateType":1,"XDate":"","XDateValue":0,"YDateType":1,"YDate":"","YDateValue":0,"IsShow":false}],"ShowTrendLine":false,"ShowFitEquation":false,"ShowRSquare":false}]}`
 		chartInfo.ChartName = "截面散点图"
+	case utils.CHART_TYPE_RADAR:
+		edbInfoIdList = []int{19, 20, 21, 22, 23, 24}
+		chartInfo.LeftMin = "10000"
+		chartInfo.LeftMax = "60000"
+		extraConfigStr = `{"DateList":[{"Type":3,"Date":"2023-11-01","Value":0,"Color":"#00f","Name":""},{"Type":1,"Date":"","Value":0,"Color":"#f00","Name":""}]}`
+		chartInfo.ChartName = "雷达图"
 	default:
 		br.Msg = "暂不支持该类型"
 		br.IsSendEmail = false

+ 54 - 2
models/data_manage/chart_info.go

@@ -26,7 +26,7 @@ type ChartInfo struct {
 	EndDate           string `description:"自定义结束日期"`
 	IsSetName         int    `description:"设置名称"`
 	EdbInfoIds        string `description:"指标id"`
-	ChartType         int    `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"`
+	ChartType         int    `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图,10:截面散点图, 11:雷达图"`
 	Calendar          string `description:"公历/农历"`
 	SeasonStartDate   string `description:"季节性图开始日期"`
 	SeasonEndDate     string `description:"季节性图开始日期"`
@@ -47,6 +47,8 @@ type ChartInfo struct {
 	Instructions      string `description:"图表说明"`
 	MarkersLines      string `description:"标识线"`
 	MarkersAreas      string `description:"标识区"`
+	Unit              string `description:"中文单位名称"`
+	UnitEn            string `description:"英文单位名称"`
 }
 
 type ChartInfoMore struct {
@@ -235,6 +237,8 @@ type EditChartInfoReq struct {
 	Instructions         string                  `description:"图表说明"`
 	MarkersLines         string                  `description:"标识线"`
 	MarkersAreas         string                  `description:"标识区"`
+	Unit                 string                  `description:"中文单位名称"`
+	UnitEn               string                  `description:"英文单位名称"`
 }
 
 type EditChartEnInfoReq struct {
@@ -701,6 +705,8 @@ func EditChartInfoAndMapping(req *EditChartInfoReq, edbInfoIdStr string, calenda
 	pars = append(pars, req.Instructions)
 	pars = append(pars, req.MarkersLines)
 	pars = append(pars, req.MarkersAreas)
+	pars = append(pars, req.Unit)
+	pars = append(pars, req.UnitEn)
 
 	sql := ` UPDATE  chart_info
 			SET
@@ -718,7 +724,9 @@ func EditChartInfoAndMapping(req *EditChartInfoReq, edbInfoIdStr string, calenda
  			  sources_from = ?,
  			  instructions = ?,
  			  markers_lines = ?,
- 			  markers_areas = ?
+ 			  markers_areas = ?,
+ 			  unit = ?,
+ 			  unit_en = ?
 			`
 	if calendar != "" {
 		sql += `,calendar = ? `
@@ -1069,6 +1077,8 @@ type AddChartInfoReq struct {
 	Instructions         string                  `description:"图表说明"`
 	MarkersLines         string                  `description:"标识线"`
 	MarkersAreas         string                  `description:"标识区"`
+	Unit                 string                  `description:"中文单位名称"`
+	UnitEn               string                  `description:"英文单位名称"`
 }
 
 type PreviewChartInfoReq struct {
@@ -1900,3 +1910,45 @@ func EditChartInfoExtraConfig(chartId int, extraConfig string) (err error) {
 
 	return
 }
+
+// PreviewRadarChartReq 预览雷达图的请求入参
+type PreviewRadarChartReq struct {
+	ChartEdbInfoList []*ChartSaveItem `description:"指标及配置信息"`
+	ExtraConfig      string           `description:"图表额外配置信息,json字符串"`
+}
+
+// RadarChartInfoReq 雷达图预览请求数据
+type RadarChartInfoReq struct {
+	DateList []RadarChartInfoDateReq `description:"日期配置"`
+}
+
+// RadarChartInfoEdbItemReq 雷达图预览请求数据(指标相关)
+type RadarChartInfoEdbItemReq struct {
+	EdbInfoId int    `description:"指标ID"`
+	Name      string `description:"别名"`
+	//NameEn    string `description:"英文别名"`
+	//Source    int    `description:"1:ETA图库;2:商品价格"`
+}
+
+// RadarChartInfoDateReq 雷达图预览请求数据(日期相关)
+type RadarChartInfoDateReq struct {
+	Type  int    `description:"配置类型"`
+	Date  string `description:"固定日期"`
+	Value int    `description:"N天的值"`
+	Color string `description:"颜色"`
+	Name  string `description:"别名"`
+}
+
+// RadarChartInfoResp 雷达图数据
+type RadarChartInfoResp struct {
+	YDataList   []RadarYData `description:"数据列"`
+	XEdbIdValue []int
+}
+
+// RadarYData 雷达图的y轴数据
+type RadarYData struct {
+	Date  string    `description:"数据日期"`
+	Color string    `description:"数据颜色"`
+	Name  string    `description:"别名"`
+	Value []float64 `description:"每个指标的值"`
+}

+ 9 - 0
routers/commentsRouter.go

@@ -2005,6 +2005,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"],
+        beego.ControllerComments{
+            Method: "PreviewRadarChartInfo",
+            Router: `/chart_info/preview/radar`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"],
         beego.ControllerComments{
             Method: "PreviewSectionScatterChartInfo",

+ 162 - 21
services/data/chart_info.go

@@ -325,7 +325,20 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 		}
 
 		extraConfig = tmpExtraConfig
-
+	case utils.CHART_TYPE_RADAR:
+		var barConfig data_manage.RadarChartInfoReq
+		if extraConfigStr == `` {
+			errMsg = "雷达图未配置"
+			err = errors.New(errMsg)
+			return
+		}
+		err = json.Unmarshal([]byte(extraConfigStr), &barConfig)
+		if err != nil {
+			errMsg = "雷达图配置异常"
+			err = errors.New(errMsg)
+			return
+		}
+		extraConfig = barConfig
 	default:
 		xEdbIdValue = make([]int, 0)
 		yDataList = make([]data_manage.YData, 0)
@@ -379,8 +392,10 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 		for _, v := range edbList {
 			v.DataList = nil
 		}
+	case utils.CHART_TYPE_RADAR: //雷达图
+		radarConf := extraConfig.(data_manage.RadarChartInfoReq)
+		xEdbIdValue, dataResp, err = RadarChartData(mappingList, edbDataListMap, radarConf)
 	}
-
 	return
 }
 
@@ -569,7 +584,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 				}
 				item.DataList = quarterDataList
 			}
-		} else if chartType == 7 { //柱方图
+		} else if chartType == 7 || chartType == utils.CHART_TYPE_RADAR { //柱方图
 			//item.DataList = dataList
 		} else {
 			item.DataList = dataList
@@ -1476,8 +1491,20 @@ func CheckChartExtraConfig(chartType int, extraConfigStr string) (edbIdList []in
 				edbIdList = append(edbIdList, v.YEdbInfoId)
 			}
 		}
+	case utils.CHART_TYPE_RADAR:
+		var extraConfig data_manage.RadarChartInfoReq
+		if extraConfigStr == `` {
+			errMsg = "雷达图未配置"
+			err = errors.New(errMsg)
+			return
+		}
+		err = json.Unmarshal([]byte(extraConfigStr), &extraConfig)
+		if err != nil {
+			errMsg = "雷达图配置异常"
+			err = errors.New(errMsg)
+			return
+		}
 	}
-
 	return
 }
 
@@ -1860,7 +1887,12 @@ func AddChartInfo(req data_manage.AddChartInfoReq, sysUserId int, sysUserRealNam
 
 	chartType := req.ChartType
 	extraConfig := req.ExtraConfig
-
+	var extraConfigEdbInfoIdArr []int
+	extraConfigEdbInfoIdArr, err, errMsg = CheckChartExtraConfig(chartType, extraConfig)
+	if err != nil {
+		err = errors.New("添加失败:" + err.Error())
+		return
+	}
 	// 季节性图表额外配置信息
 	var seasonExtraConfig string
 	// 关联指标
@@ -1936,14 +1968,7 @@ func AddChartInfo(req data_manage.AddChartInfoReq, sysUserId int, sysUserRealNam
 			err = errors.New(errMsg)
 			return
 		}
-
-		tmpEdbInfoIdArr, tmpErr, tmpErrMsg := CheckChartExtraConfig(chartType, extraConfig)
-		if err != nil {
-			errMsg = tmpErrMsg
-			err = errors.New("添加失败:" + tmpErr.Error())
-			return
-		}
-		edbInfoIdArr = tmpEdbInfoIdArr
+		edbInfoIdArr = extraConfigEdbInfoIdArr
 		lenEdbInfoIdArr := len(edbInfoIdArr)
 		if lenEdbInfoIdArr > 0 {
 			tmpEdbList, tmpErr := data_manage.GetEdbInfoByIdList(edbInfoIdArr)
@@ -2108,6 +2133,8 @@ func AddChartInfo(req data_manage.AddChartInfoReq, sysUserId int, sysUserRealNam
 	chartInfo.Instructions = req.Instructions
 	chartInfo.MarkersLines = req.MarkersLines
 	chartInfo.MarkersAreas = req.MarkersAreas
+	chartInfo.Unit = req.Unit
+	chartInfo.UnitEn = req.UnitEn
 	newId, err := data_manage.AddChartInfo(chartInfo)
 	if err != nil {
 		errMsg = `保存失败`
@@ -2218,6 +2245,13 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin) (cha
 		return
 	}
 
+	var extraConfigEdbInfoIdArr []int
+	extraConfigEdbInfoIdArr, err, errMsg = CheckChartExtraConfig(req.ChartType, req.ExtraConfig)
+	if err != nil {
+		err = errors.New("添加失败:" + err.Error())
+		return
+	}
+
 	// 季节性图表额外配置信息
 	var seasonExtraConfig string
 	// 图表关联指标id
@@ -2299,14 +2333,7 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin) (cha
 			return
 		}
 
-		// 校验配置的指标列表
-		tmpEdbInfoIdArr, tmpErr, tmpErrMsg := CheckChartExtraConfig(req.ChartType, req.ExtraConfig)
-		if tmpErr != nil {
-			errMsg = tmpErrMsg
-			err = errors.New("添加失败:" + tmpErr.Error())
-			return
-		}
-		edbInfoIdArr = tmpEdbInfoIdArr
+		edbInfoIdArr = extraConfigEdbInfoIdArr
 		lenEdbInfoIdArr := len(edbInfoIdArr)
 		if lenEdbInfoIdArr > 0 {
 			tmpEdbList, tmpErr := data_manage.GetEdbInfoByIdList(edbInfoIdArr)
@@ -2514,3 +2541,117 @@ func GetEdbSourceByEdbInfoIdList(chartEdbInfoMappingList []*data_manage.ChartEdb
 	}
 	return
 }
+
+// RadarChartData 雷达图的数据处理
+func RadarChartData(mappingList []*data_manage.ChartEdbInfoMapping, edbDataListMap map[int][]*data_manage.EdbDataList, extraConfig data_manage.RadarChartInfoReq) (edbIdList []int, chartDataResp data_manage.RadarChartInfoResp, err error) {
+	// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
+	edbDataMap := make(map[int]map[string]float64)
+	for edbInfoId, edbDataList := range edbDataListMap {
+		edbDateData := make(map[string]float64)
+		for _, edbData := range edbDataList {
+			edbDateData[edbData.DataTime] = edbData.Value
+		}
+		edbDataMap[edbInfoId] = edbDateData
+	}
+	// edbIdList 指标展示顺序;x轴的指标顺序
+	edbIdList = make([]int, 0)
+	for _, v := range mappingList {
+		edbIdList = append(edbIdList, v.EdbInfoId)
+	}
+	chartDateList := extraConfig.DateList
+
+	yDataList := make([]data_manage.RadarYData, 0) //y轴的数据列表
+
+	for _, chartDate := range chartDateList {
+		var maxDate time.Time
+
+		findDataList := make([]float64, 0) // 当前日期的数据值
+		for _, edbInfoId := range edbIdList {
+			findDate := chartDate.Date            //需要的日期值
+			dataList := edbDataListMap[edbInfoId] //指标的所有数据值
+			if len(dataList) <= 0 {
+				// 没有数据的指标id
+				findDataList = append(findDataList, 0)
+				continue
+			}
+			switch chartDate.Type {
+			case 1: //最新值
+				findDate = dataList[len(dataList)-1].DataTime
+			case 2: //近期几天
+				findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[len(dataList)-1].DataTime, time.Local)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				findDateTime = findDateTime.AddDate(0, 0, -chartDate.Value)
+
+				lenData := len(dataList) - 1
+				for i := lenData; i >= 0; i-- {
+					currDateTime, e := time.ParseInLocation(utils.FormatDate, dataList[i].DataTime, time.Local)
+					if e != nil {
+						err = e
+						return
+					}
+					if currDateTime.Equal(findDateTime) || currDateTime.Before(findDateTime) {
+						findDate = dataList[i].DataTime
+						break
+					}
+				}
+			case 3: // 固定日期
+				//最早的日期
+				minDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				//寻找固定日期的数据
+				findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, chartDate.Date, time.Local)
+				if tmpErr != nil {
+					err = tmpErr
+					return
+				}
+				for tmpDateTime := findDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
+					tmpDate := tmpDateTime.Format(utils.FormatDate)
+					if _, ok := edbDataMap[edbInfoId][tmpDate]; ok { //如果能找到数据,那么就返回
+						findDate = tmpDate
+						break
+					}
+				}
+			default:
+				err = errors.New(fmt.Sprint("日期类型异常,Type:", chartDate.Type))
+				return
+			}
+			findDateTime, _ := time.ParseInLocation(utils.FormatDate, findDate, time.Local)
+			if maxDate.IsZero() {
+				maxDate = findDateTime
+			} else {
+				if findDateTime.After(maxDate) {
+					maxDate = findDateTime
+				}
+			}
+			if tmpValue, ok := edbDataMap[edbInfoId][findDate]; ok {
+				tmpValue, _ = decimal.NewFromFloat(tmpValue).Round(4).Float64()
+				findDataList = append(findDataList, tmpValue)
+			} else {
+				findDataList = append(findDataList, 0)
+			}
+		}
+
+		yDate := "0000-00-00"
+		if !maxDate.IsZero() {
+			yDate = maxDate.Format(utils.FormatDate)
+		}
+		yDataList = append(yDataList, data_manage.RadarYData{
+			Date:  yDate,
+			Value: findDataList,
+			Color: chartDate.Color,
+			Name:  chartDate.Name,
+		})
+	}
+
+	chartDataResp = data_manage.RadarChartInfoResp{
+		YDataList:   yDataList,
+		XEdbIdValue: edbIdList,
+	}
+	return
+}

+ 19 - 3
services/data/chart_theme.go

@@ -49,7 +49,20 @@ func GetThemePreviewChartEdbData(chartType int, calendar, startDate, endDate str
 		}
 
 		extraConfig = tmpExtraConfig
-
+	case utils.CHART_TYPE_RADAR:
+		var barConfig data_manage.RadarChartInfoReq
+		if extraConfigStr == `` {
+			errMsg = "雷达图未配置"
+			err = errors.New(errMsg)
+			return
+		}
+		err = json.Unmarshal([]byte(extraConfigStr), &barConfig)
+		if err != nil {
+			errMsg = "雷达图配置异常"
+			err = errors.New(errMsg)
+			return
+		}
+		extraConfig = barConfig
 	default:
 		xEdbIdValue = make([]int, 0)
 		yDataList = make([]data_manage.YData, 0)
@@ -103,8 +116,11 @@ func GetThemePreviewChartEdbData(chartType int, calendar, startDate, endDate str
 		for _, v := range edbList {
 			v.DataList = nil
 		}
-	}
 
+	case utils.CHART_TYPE_RADAR: //雷达图
+		radarConf := extraConfig.(data_manage.RadarChartInfoReq)
+		xEdbIdValue, dataResp, err = RadarChartData(mappingList, edbDataListMap, radarConf)
+	}
 	return
 }
 
@@ -228,7 +244,7 @@ func getThemePreviewEdbDataMapList(chartType int, calendar, startDate, endDate s
 				return
 			}
 			item.DataList = quarterDataList
-		} else if chartType == 7 { //柱方图
+		} else if chartType == 7 || chartType == utils.CHART_TYPE_RADAR { //柱方图
 			//item.DataList = dataList
 		} else {
 			item.DataList = dataList

+ 1 - 0
utils/constants.go

@@ -302,6 +302,7 @@ const (
 	CHART_TYPE_CURVE           = 1  //曲线图
 	CHART_TYPE_BAR             = 7  //柱形图
 	CHART_TYPE_SECTION_SCATTER = 10 //截面散点图样式
+	CHART_TYPE_RADAR           = 11 //雷达图
 )
 
 // 指标类型