xyxie 10 months ago
parent
commit
14ae7fd22a

+ 94 - 0
controllers/data_manage/chart_info_section.go

@@ -1,8 +1,12 @@
 package data_manage
 package data_manage
 
 
 import (
 import (
+	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/data"
+	"eta/eta_api/utils"
+	"strings"
 )
 )
 
 
 // GetChartTypeList
 // GetChartTypeList
@@ -61,3 +65,93 @@ func (this *ChartInfoController) GetChartTypeList() {
 	br.Msg = "获取图表类型成功"
 	br.Msg = "获取图表类型成功"
 
 
 }
 }
+
+// PreviewSectionCombineChartInfo
+// @Title 图表-获取预览的截面组合图数据
+// @Description 图表-获取预览的截面组合图数据
+// @Param	request	body data_manage.PreviewSectionCombineChartReq true "type json string"
+// @Success 200 {object} data_manage.ChartEdbInfoDetailResp
+// @router /chart_info/preview/section_combine [post]
+func (this *ChartInfoController) PreviewSectionCombineChartInfo() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	var req data_manage.PreviewSectionCombineChartReq
+	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_SECTION_COMBINE
+	edbInfoIdArr, err, errMsg := data.CheckChartExtraConfig(chartType, req.ExtraConfig)
+	if err != nil {
+		br.Msg = errMsg
+		br.ErrMsg = "添加失败:" + err.Error()
+		return
+	}
+
+	mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIdArr)
+
+	// 获取图表中的指标数据
+	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, ",")
+	}
+
+	// 图表的指标来源
+	sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
+	chartInfo.ChartSource = strings.Join(sourceNameList, ",")
+	chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
+
+	//图表操作权限
+	chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId, true)
+	//判断是否需要展示英文标识
+	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,
+	}
+
+	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
+}

+ 22 - 13
models/data_manage/chart_info.go

@@ -2367,18 +2367,18 @@ type ChartSectionExtraConf struct {
 // 截面组合图额外配置
 // 截面组合图额外配置
 type ChartSectionAllExtraConf struct {
 type ChartSectionAllExtraConf struct {
 	DateConfList        []*ChartSectionDateConfItem
 	DateConfList        []*ChartSectionDateConfItem
-	IsHeap              int     `description:"是否堆积(1.堆积,0不堆积)"`
-	XDataList           []XData `description:"横轴名称设置"`
-	UnitList            []XData `description:"纵轴单位设置"`
-	BaseChartSeriesName int     `description:"基准系列名称"`
-	SortType            int     `description:"排序类型,0默认,1升序,2降序"`
+	IsHeap              int      `description:"是否堆积(1.堆积,0不堆积)"`
+	XDataList           []XData  `description:"横轴名称设置"`
+	UnitList            []*XData `description:"纵轴单位设置"`
+	BaseChartSeriesName string   `description:"基准系列名称"`
+	SortType            int      `description:"排序类型,0默认,1升序,2降序"`
 	SeriesList          []*ChartSectionSeriesItem
 	SeriesList          []*ChartSectionSeriesItem
 }
 }
 
 
 type ChartSectionDateConfItem struct {
 type ChartSectionDateConfItem struct {
 	MoveForward    int    `description:"前移的期数"`
 	MoveForward    int    `description:"前移的期数"`
 	EdbInfoId      int    `description:"指标ID"`
 	EdbInfoId      int    `description:"指标ID"`
-	DateType       string `description:"日期类型:0 指标日期,1系统日期"`
+	DateType       int    `description:"日期类型:0 指标日期,1系统日期"`
 	DateConfName   string `description:"引用日期名称"` // 引用日期名称不能重复
 	DateConfName   string `description:"引用日期名称"` // 引用日期名称不能重复
 	DateConfNameEn string `description:"引用日期英文名称"`
 	DateConfNameEn string `description:"引用日期英文名称"`
 	DateChange     []*ChartSectionDateChange
 	DateChange     []*ChartSectionDateChange
@@ -2418,18 +2418,20 @@ type ChartSectionSeriesEdbConf struct {
 	ChartInfoId             int `description:"图表ID"`
 	ChartInfoId             int `description:"图表ID"`
 	EdbInfoId               int `description:"指标id"`
 	EdbInfoId               int `description:"指标id"`
 	DateConf                *ChartSectionSeriesDateConfItem
 	DateConf                *ChartSectionSeriesDateConfItem
-	EdbAliasName            string `description:"中文别名"`
-	EdbAliasNameEn          string `description:"英文别名"`
+	EdbName                 string `description:"中文别名"`
+	EdbNameEn               string `description:"英文别名"`
+	Unit                    string `description:"单位"`
+	UnitEn                  string `description:"英文单位"`
 	DateConfName            string `description:"引用日期名称"`
 	DateConfName            string `description:"引用日期名称"`
 }
 }
 
 
 type ChartSectionCombineDataResp struct {
 type ChartSectionCombineDataResp struct {
 	DateConfList        []*ChartSectionDateConfItem
 	DateConfList        []*ChartSectionDateConfItem
-	IsHeap              int     `description:"是否堆积(1.堆积,0不堆积)"`
-	XDataList           []XData `description:"横轴名称设置"`
-	UnitList            []XData `description:"纵轴单位设置"`
-	BaseChartSeriesName int     `description:"基准系列名称"`
-	SortType            int     `description:"排序类型,0默认,1升序,2降序"`
+	IsHeap              int      `description:"是否堆积(1.堆积,0不堆积)"`
+	XDataList           []XData  `description:"横轴名称设置"`
+	UnitList            []*XData `description:"纵轴单位设置"`
+	BaseChartSeriesName string   `description:"基准系列名称"`
+	SortType            int      `description:"排序类型,0默认,1升序,2降序"`
 	SeriesList          []*ChartSectionSeriesItem
 	SeriesList          []*ChartSectionSeriesItem
 }
 }
 
 
@@ -2438,3 +2440,10 @@ type ChartSectionSeriesDateConfItem struct {
 	MoveForward int `description:"前移的期数"`
 	MoveForward int `description:"前移的期数"`
 	DateChange  []*ChartSectionDateChange
 	DateChange  []*ChartSectionDateChange
 }
 }
+
+// PreviewSectionCombineChartReq 预览截面组合图的请求
+type PreviewSectionCombineChartReq struct {
+	ChartName       string `description:"图表名称"`
+	ChartClassifyId int    `description:"分类id"`
+	ExtraConfig     string `description:"图表额外配置信息,json字符串"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -2446,6 +2446,15 @@ func init() {
             Filters: nil,
             Filters: nil,
             Params: 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: "PreviewSectionCombineChartInfo",
+            Router: `/chart_info/preview/section_combine`,
+            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.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"],
         beego.ControllerComments{
         beego.ControllerComments{
             Method: "PreviewSectionScatterChartInfo",
             Method: "PreviewSectionScatterChartInfo",
@@ -2491,6 +2500,15 @@ func init() {
             Filters: nil,
             Filters: nil,
             Params: 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: "GetChartTypeList",
+            Router: `/chart_info/type_list`,
+            AllowHTTPMethods: []string{"get"},
+            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.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"],
         beego.ControllerComments{
         beego.ControllerComments{
             Method: "SaveAdjustEdbInfo",
             Method: "SaveAdjustEdbInfo",

+ 74 - 2
services/data/chart_extra_config.go

@@ -230,7 +230,8 @@ func GetChartSectionCombineData(chartInfoId int, mappingList []*data_manage.Char
 	// 遍历每个指标,根据选中的日期,进行日期变换得到最终的日期,根据最终的日期获取对应的值
 	// 遍历每个指标,根据选中的日期,进行日期变换得到最终的日期,根据最终的日期获取对应的值
 	// 组装数据
 	// 组装数据
 	dataListResp := new(data_manage.ChartSectionCombineDataResp) //y轴的数据列表
 	dataListResp := new(data_manage.ChartSectionCombineDataResp) //y轴的数据列表
-
+	baseSeries := new(data_manage.ChartSectionSeriesItem)        //y轴的系列
+	var firstUnit, leftUnit, rightUnit, right2Unit *data_manage.XData
 	for _, seriesItem := range extraConfig.SeriesList {
 	for _, seriesItem := range extraConfig.SeriesList {
 		var maxDate time.Time
 		var maxDate time.Time
 		var minVal, maxVal float64
 		var minVal, maxVal float64
@@ -238,10 +239,20 @@ func GetChartSectionCombineData(chartInfoId int, mappingList []*data_manage.Char
 		dataList := make([]float64, len(seriesItem.EdbInfoList))
 		dataList := make([]float64, len(seriesItem.EdbInfoList))
 		for index, edbConf := range seriesItem.EdbInfoList {
 		for index, edbConf := range seriesItem.EdbInfoList {
 			edbInfoId := edbConf.EdbInfoId //X轴的指标
 			edbInfoId := edbConf.EdbInfoId //X轴的指标
-			_, ok := edbMappingMap[edbInfoId]
+			edbMappingInfo, ok := edbMappingMap[edbInfoId]
 			if !ok {
 			if !ok {
 				continue
 				continue
 			}
 			}
+			seriesItem.EdbInfoList[index].EdbName = edbMappingInfo.EdbName
+			seriesItem.EdbInfoList[index].EdbNameEn = edbMappingInfo.EdbNameEn
+			seriesItem.EdbInfoList[index].Unit = edbMappingInfo.Unit
+			seriesItem.EdbInfoList[index].UnitEn = edbMappingInfo.UnitEn
+			if index == 0 {
+				firstUnit = &data_manage.XData{
+					Name:   edbMappingInfo.Unit,
+					NameEn: edbMappingInfo.UnitEn,
+				}
+			}
 			edbDataList, ok3 := edbDataListMap[edbInfoId]
 			edbDataList, ok3 := edbDataListMap[edbInfoId]
 			if !ok3 {
 			if !ok3 {
 				err = fmt.Errorf("指标%d的日期数据不存在", edbInfoId)
 				err = fmt.Errorf("指标%d的日期数据不存在", edbInfoId)
@@ -306,6 +317,67 @@ func GetChartSectionCombineData(chartInfoId int, mappingList []*data_manage.Char
 		seriesItem.MinData = minVal
 		seriesItem.MinData = minVal
 		seriesItem.MaxData = maxVal
 		seriesItem.MaxData = maxVal
 		seriesItem.NoDataEdbIdList = noDataEdbIdList
 		seriesItem.NoDataEdbIdList = noDataEdbIdList
+		if extraConfig.BaseChartSeriesName == seriesItem.SeriesName {
+			baseSeries = seriesItem
+		}
+		if seriesItem.IsAxis == 1 && leftUnit == nil { //左轴,右轴
+			leftUnit = firstUnit
+		} else if seriesItem.IsAxis == 0 && rightUnit == nil {
+			rightUnit = firstUnit
+		} else if seriesItem.IsAxis == 2 && right2Unit == nil {
+			right2Unit = firstUnit
+		}
+	}
+	// 处理横轴
+	// 遍历基准系列,判断有几个横轴名称
+	if baseSeries == nil {
+		err = fmt.Errorf("基准系列不存在")
+		return
+	}
+	xDataList := make([]data_manage.XData, 0)
+	for index, item := range baseSeries.EdbInfoList {
+		if index == 0 {
+			firstUnit = &data_manage.XData{
+				Name:   item.Unit,
+				NameEn: item.UnitEn,
+			}
+		}
+		tmp := data_manage.XData{
+			Name:   item.EdbName,
+			NameEn: item.EdbNameEn,
+		}
+		// 如果已经设置了横轴名称,则用设置的名称替换
+		if len(extraConfig.XDataList) > index {
+			newItem := extraConfig.XDataList[index]
+			if newItem.Name != "" {
+				tmp = newItem
+			}
+		}
+		xDataList = append(xDataList, tmp)
+	}
+	dataListResp.XDataList = xDataList
+
+	// todo 处理纵轴, 如果只存在一个右轴会有问题
+	unitList := make([]*data_manage.XData, 3)
+	if baseSeries.IsAxis == 1 { //左轴,右轴
+		leftUnit = firstUnit
+	} else if baseSeries.IsAxis == 2 {
+		rightUnit = firstUnit
+	} else {
+		right2Unit = firstUnit
+	}
+	if len(extraConfig.UnitList) == 0 {
+		unitList[0] = leftUnit
+		unitList[1] = rightUnit
+		unitList[2] = right2Unit
+	} else if len(extraConfig.UnitList) == 1 {
+		unitList[0] = extraConfig.UnitList[0]
+		unitList[1] = rightUnit
+		unitList[2] = right2Unit
+	} else if len(extraConfig.UnitList) == 2 {
+		unitList[0] = extraConfig.UnitList[0]
+		unitList[1] = extraConfig.UnitList[1]
+		unitList[2] = right2Unit
 	}
 	}
 
 
 	dataListResp.XDataList = extraConfig.XDataList
 	dataListResp.XDataList = extraConfig.XDataList

+ 89 - 2
services/data/chart_info.go

@@ -344,6 +344,56 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 			return
 			return
 		}
 		}
 		extraConfig = barConfig
 		extraConfig = barConfig
+	case utils.CHART_TYPE_SECTION_COMBINE:
+		// 预览和详情都走这个接口
+		var sectionExtraConfig data_manage.ChartSectionAllExtraConf
+		if extraConfigStr == `` {
+			errMsg = "截面组合图未配置"
+			err = errors.New(errMsg)
+			return
+		}
+		err = json.Unmarshal([]byte(extraConfigStr), &sectionExtraConfig)
+		if err != nil {
+			errMsg = "截面组合图配置异常"
+			err = errors.New(errMsg)
+			return
+		}
+		//校验引用日期名称是否重复
+		dateNameMap := make(map[string]int)
+		dateNameEnMap := make(map[string]int)
+		for _, v := range sectionExtraConfig.DateConfList {
+			if _, ok := dateNameMap[v.DateConfName]; ok {
+				errMsg = "截面组合图引用日期名称设置重复"
+				err = errors.New(errMsg + v.DateConfName)
+				return
+			}
+			if _, ok := dateNameEnMap[v.DateConfNameEn]; ok {
+				errMsg = "截面组合图引用日期名称设置重复"
+				err = errors.New(errMsg + v.DateConfNameEn)
+				return
+			}
+			dateNameMap[v.DateConfName] = 1
+			dateNameEnMap[v.DateConfNameEn] = 1
+		}
+
+		//检查系列名称是否重复
+		seriesNameMap := make(map[string]int)
+		seriesNameEnMap := make(map[string]int)
+		for _, v := range sectionExtraConfig.SeriesList {
+			if _, ok := seriesNameMap[v.SeriesName]; ok {
+				errMsg = "截面组合图系列名称设置重复"
+				err = errors.New(errMsg + v.SeriesName)
+				return
+			}
+			if _, ok := seriesNameEnMap[v.SeriesNameEn]; ok {
+				errMsg = "截面组合图系列名称设置重复"
+				err = errors.New(errMsg + v.SeriesNameEn)
+				return
+			}
+		}
+
+		//todo 检查基准系列是否设置
+		//todo 如果是详情接口,应该要从其他表里查询配置
 	default:
 	default:
 		xEdbIdValue = make([]int, 0)
 		xEdbIdValue = make([]int, 0)
 		yDataList = make([]data_manage.YData, 0)
 		yDataList = make([]data_manage.YData, 0)
@@ -393,6 +443,14 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 			return
 			return
 		}
 		}
 
 
+		// 这个数据没有必要返回给前端
+		for _, v := range edbList {
+			v.DataList = nil
+		}
+	case utils.CHART_TYPE_SECTION_COMBINE: // 截面组合图
+		sectionConf := extraConfig.(data_manage.ChartSectionAllExtraConf)
+		xEdbIdValue, dataResp, err = GetChartSectionCombineData(chartInfoId, mappingList, edbDataListMap, sectionConf)
+
 		// 这个数据没有必要返回给前端
 		// 这个数据没有必要返回给前端
 		for _, v := range edbList {
 		for _, v := range edbList {
 			v.DataList = nil
 			v.DataList = nil
@@ -1578,7 +1636,7 @@ func CheckChartExtraConfig(chartType int, extraConfigStr string) (edbIdList []in
 			return
 			return
 		}
 		}
 	case utils.CHART_TYPE_SECTION_COMBINE:
 	case utils.CHART_TYPE_SECTION_COMBINE:
-		var extraConfig data_manage.ChartSectionExtraConf
+		var extraConfig data_manage.ChartSectionAllExtraConf
 		if extraConfigStr == `` {
 		if extraConfigStr == `` {
 			errMsg = "截面组合图未配置"
 			errMsg = "截面组合图未配置"
 			err = errors.New(errMsg)
 			err = errors.New(errMsg)
@@ -1607,8 +1665,27 @@ func CheckChartExtraConfig(chartType int, extraConfigStr string) (edbIdList []in
 			dateNameMap[v.DateConfName] = 1
 			dateNameMap[v.DateConfName] = 1
 			dateNameEnMap[v.DateConfNameEn] = 1
 			dateNameEnMap[v.DateConfNameEn] = 1
 		}
 		}
-	}
 
 
+		// todo 校验系列名称
+
+		// 遍历指标列表获取指标id
+		edbIdMap := make(map[int]int)
+		for _, v := range extraConfig.SeriesList {
+			for _, item := range v.EdbInfoList {
+				if _, ok := edbIdMap[item.EdbInfoId]; !ok {
+					edbIdMap[item.EdbInfoId] = item.EdbInfoId
+					edbIdList = append(edbIdList, item.EdbInfoId)
+				}
+			}
+		}
+		// todo 遍历引用日期获取引用日期里的指标ID, 如果引用日期里的指标没有被引用,是否加入映射
+		for _, v := range extraConfig.DateConfList {
+			if _, ok := edbIdMap[v.EdbInfoId]; !ok && v.EdbInfoId > 0 {
+				edbIdMap[v.EdbInfoId] = v.EdbInfoId
+				edbIdList = append(edbIdList, v.EdbInfoId)
+			}
+		}
+	}
 	return
 	return
 }
 }
 
 
@@ -3245,6 +3322,8 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 			}
 			}
 		}
 		}
 
 
+		//todo 检查基准系列是否设置
+		//todo 如果是详情接口,应该要从其他表里查询配置
 	default:
 	default:
 		xEdbIdValue = make([]int, 0)
 		xEdbIdValue = make([]int, 0)
 		yDataList = make([]data_manage.YData, 0)
 		yDataList = make([]data_manage.YData, 0)
@@ -3294,6 +3373,14 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 			return
 			return
 		}
 		}
 
 
+		// 这个数据没有必要返回给前端
+		for _, v := range edbList {
+			v.DataList = nil
+		}
+	case utils.CHART_TYPE_SECTION_COMBINE: // 截面组合图
+		sectionConf := extraConfig.(data_manage.ChartSectionAllExtraConf)
+		xEdbIdValue, dataResp, err = GetChartSectionCombineData(chartInfoId, mappingList, edbDataListMap, sectionConf)
+
 		// 这个数据没有必要返回给前端
 		// 这个数据没有必要返回给前端
 		for _, v := range edbList {
 		for _, v := range edbList {
 			v.DataList = nil
 			v.DataList = nil