Parcourir la source

编辑指标信息

xyxie il y a 7 mois
Parent
commit
5cd94dd0e6

+ 30 - 55
controllers/data_manage/range_analysis/chart_info.go

@@ -52,36 +52,36 @@ func (this *RangeChartChartInfoController) Preview() {
 		return
 	}
 	// 基础校验
-	if len(req.EdbInfoIds) == 0 {
+	if len(req.ChartEdbInfoList) == 0 {
 		br.Msg = "请选择指标"
 		return
 	}
 	// todo 校验时间区间配置
-	switch req.ExtraConf.DateRangeType {
+	switch req.ExtraConfig.DateRangeType {
 	case 0:
 	case 1:
-		if len(req.ExtraConf.ManualDateConf) == 0 {
+		if len(req.ExtraConfig.ManualDateConf) == 0 {
 			br.Msg = "请选择时间区间"
 			return
 		}
 		// 先按开始时间排序
-		sort.Sort(data_manage.ChartRangeAnalysisManualDateConfList(req.ExtraConf.ManualDateConf))
+		sort.Sort(data_manage.ChartRangeAnalysisManualDateConfList(req.ExtraConfig.ManualDateConf))
 		// 校验日期
 		// 1.如果截止时间小于指标的截止日期,需要重置为指标的截止日期
 		// 2.时间区间不能重叠
-		for i := 1; i < len(req.ExtraConf.ManualDateConf); i++ {
-			start1, err := time.Parse(utils.FormatDate, req.ExtraConf.ManualDateConf[i-1].EndDate)
+		for i := 1; i < len(req.ExtraConfig.ManualDateConf); i++ {
+			start1, err := time.Parse(utils.FormatDate, req.ExtraConfig.ManualDateConf[i-1].EndDate)
 			if err != nil {
 				br.Msg = "截止日期格式有误"
 				return
 			}
-			start2, err := time.Parse(utils.FormatDate, req.ExtraConf.ManualDateConf[i].EndDate)
+			start2, err := time.Parse(utils.FormatDate, req.ExtraConfig.ManualDateConf[i].EndDate)
 			if err != nil {
 				br.Msg = "截止日期格式有误"
 				return
 			}
 
-			start3, err := time.Parse(utils.FormatDate, req.ExtraConf.ManualDateConf[i].StartDate)
+			start3, err := time.Parse(utils.FormatDate, req.ExtraConfig.ManualDateConf[i].StartDate)
 			if err != nil {
 				br.Msg = "截止日期格式有误"
 				return
@@ -94,15 +94,15 @@ func (this *RangeChartChartInfoController) Preview() {
 		}
 		//如果截止时间大于指标的截止日期,需要重置为指标的截止日期
 	case 2:
-		if req.ExtraConf.YearDateConf.StartDay == "" || req.ExtraConf.YearDateConf.EndDay == "" {
+		if req.ExtraConfig.YearDateConf.StartDay == "" || req.ExtraConfig.YearDateConf.EndDay == "" {
 			br.Msg = "请选择时间区间"
 			return
 		}
-		if _, e := time.Parse(utils.FormatMonthDay, req.ExtraConf.YearDateConf.StartDay); e != nil {
+		if _, e := time.Parse(utils.FormatMonthDay, req.ExtraConfig.YearDateConf.StartDay); e != nil {
 			br.Msg = "开始日期格式有误"
 			return
 		}
-		if _, e := time.Parse(utils.FormatMonthDay, req.ExtraConf.YearDateConf.EndDay); e != nil {
+		if _, e := time.Parse(utils.FormatMonthDay, req.ExtraConfig.YearDateConf.EndDay); e != nil {
 			br.Msg = "结束日期格式有误"
 			return
 		}
@@ -111,13 +111,17 @@ func (this *RangeChartChartInfoController) Preview() {
 	// 获取指标信息
 	//chartInfo.CorrelationLeadUnit = req.LeadUnit
 	edbInfoMappingList := make([]*data_manage.ChartEdbInfoMapping, 0)
-	for _, v := range req.EdbInfoIds {
-		edbInfoMapping, e := data_manage.GetChartEdbMappingByEdbInfoId(v)
+	for _, v := range req.ChartEdbInfoList {
+		edbInfoMapping, e := data_manage.GetChartEdbMappingByEdbInfoId(v.EdbInfoId)
 		if e != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取区间计算图表, A指标mapping信息失败, Err:" + e.Error()
 			return
 		}
+		if v.EdbAliasName != "" {
+			edbInfoMapping.EdbAliasName = v.EdbAliasName
+		}
+		edbInfoMapping.IsAxis = v.IsAxis
 		edbInfoMappingList = append(edbInfoMappingList, edbInfoMapping)
 	}
 
@@ -125,7 +129,7 @@ func (this *RangeChartChartInfoController) Preview() {
 	chartInfo.ChartType = 1
 
 	// 获取图表x轴y轴
-	edbList, xEdbIdValue, dataResp, e := rangeServ.GetChartDataByEdbInfoList(0, "", "", edbInfoMappingList, &req.ExtraConf)
+	edbList, xEdbIdValue, dataResp, e := rangeServ.GetChartDataByEdbInfoList(0, req.DateType, req.StartYear, req.StartDate, req.EndDate, edbInfoMappingList, &req.ExtraConfig)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取区间计算图表, 图表计算值失败, Err:" + e.Error()
@@ -345,6 +349,16 @@ func (this *RangeChartChartInfoController) Detail() {
 	if dateType <= 0 {
 		dateType = chartInfo.DateType
 	}
+	if startDate == "" {
+		startDate = chartInfo.StartDate
+	}
+	if endDate == "" {
+		endDate = chartInfo.EndDate
+	}
+
+	if startYear <= 0 {
+		startYear = chartInfo.StartYear
+	}
 	// 获取主题样式
 	chartTheme, err := data.GetChartThemeConfig(chartInfo.ChartThemeId, utils.CHART_SOURCE_DEFAULT, 1)
 	if err != nil {
@@ -369,25 +383,6 @@ func (this *RangeChartChartInfoController) Detail() {
 		br.ErrMsg = "图表没有指标,无法计算"
 		return
 	}
-	yearMax := 0
-
-	if dateType == utils.DateTypeNYears {
-		for _, v := range edbInfoMappingList {
-			if v.LatestDate != "" {
-				lastDateT, tErr := time.Parse(utils.FormatDate, v.LatestDate)
-				if tErr != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取图表日期信息失败,Err:" + tErr.Error()
-					return
-				}
-				if lastDateT.Year() > yearMax {
-					yearMax = lastDateT.Year()
-				}
-			}
-		}
-	}
-	// 开始/结束日期
-	startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, yearMax)
 
 	// 区间计算图表配置校验
 	var extraConfig data_manage.ChartRangeAnalysisExtraConf
@@ -403,8 +398,7 @@ func (this *RangeChartChartInfoController) Detail() {
 	}
 
 	// 获取图表x轴y轴
-	// todo 日期处理,
-	edbList, xEdbIdValue, dataResp, e := rangeServ.GetChartDataByEdbInfoList(chartInfoId, "", "", edbInfoMappingList, &extraConfig)
+	edbList, xEdbIdValue, dataResp, e := rangeServ.GetChartDataByEdbInfoList(chartInfoId, dateType, startYear, startDate, endDate, edbInfoMappingList, &extraConfig)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取区间计算图表, 图表计算值失败, Err:" + e.Error()
@@ -783,28 +777,11 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 		errMsg = "获取图表,指标信息失败,Err:" + err.Error()
 		return
 	}
-	yearMax := 0
 	dateType := chartInfo.DateType
-	if dateType == utils.DateTypeNYears {
-		for _, v := range edbInfoMappingList {
-			if v.LatestDate != "" {
-				lastDateT, tErr := time.Parse(utils.FormatDate, v.LatestDate)
-				if tErr != nil {
-					msg = "获取失败"
-					errMsg = "获取图表日期信息失败,Err:" + tErr.Error()
-					return
-				}
-				if lastDateT.Year() > yearMax {
-					yearMax = lastDateT.Year()
-				}
-			}
-		}
-	}
 	// 开始/结束日期
 	startYear := chartInfo.StartYear
 	startDate := chartInfo.StartDate
 	endDate := chartInfo.EndDate
-	startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, yearMax)
 
 	// 区间计算图表配置校验
 	var extraConfig data_manage.ChartRangeAnalysisExtraConf
@@ -823,13 +800,11 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 	if len(edbInfoMappingList) == 0 {
 		msg = "获取失败"
 		errMsg = "图表没有指标,无法计算"
-
 		return
 	}
 
 	// 获取图表x轴y轴
-	// todo 日期处理,
-	edbList, xEdbIdValue, dataResp, e := rangeServ.GetChartDataByEdbInfoList(chartInfoId, "", "", edbInfoMappingList, &extraConfig)
+	edbList, xEdbIdValue, dataResp, e := rangeServ.GetChartDataByEdbInfoList(chartInfoId, dateType, startYear, startDate, endDate, edbInfoMappingList, &extraConfig)
 	if e != nil {
 		msg = "获取失败"
 		errMsg = "获取区间计算图表, 图表计算值失败, Err:" + e.Error()

+ 18 - 13
models/data_manage/chart_info_range_analysis.go

@@ -21,7 +21,7 @@ type ChartRangeAnalysisExtraConf struct {
 	DataConvertType      int                               `description:"数据转换类型 0不转, 1乘 2除 3对数"`
 	DataConvertConf      ChartRangeAnalysisDataConvertConf `description:"数据转换详情"`
 	SeriesName           string                            `description:"指标系列名称"`
-	EdbInfoIds           []int
+	EdbInfoType          int                               `description:"指标类型:0普通指标,1预测指标"`
 }
 
 type ChartRangeAnalysisAutoDateChangeConf struct {
@@ -69,9 +69,12 @@ type ChartRangeAnalysisYearDateConf struct {
 
 // ChartRangeAnalysisPreviewReq 相关性图表请求体
 type ChartRangeAnalysisPreviewReq struct {
-	ExtraConf   ChartRangeAnalysisExtraConf
-	EdbInfoIds  []int `description:"指标Id"`
-	EdbInfoType int
+	ExtraConfig      ChartRangeAnalysisExtraConf
+	ChartEdbInfoList []*ChartSaveItem `description:"指标及配置信息"`
+	DateType         int              `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:起始日期至今 20:最近N年"`
+	StartDate        string           `description:"自定义开始日期"`
+	EndDate          string           `description:"自定义结束日期"`
+	StartYear        int              `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
 }
 
 type ChartRangeAnalysisManualDateConfList []ChartRangeAnalysisManualDateConf
@@ -84,7 +87,7 @@ func (a ChartRangeAnalysisManualDateConfList) Less(i, j int) bool {
 
 type ChartRangeAnalysisDataResp struct { //图表详情返回值
 	*ChartRangeAnalysisExtraConf
-	SeriesName string `description:"指标系列名称"`
+	SeriesId int `description:"指标系列ID"`
 }
 
 type ChartRangeAnalysisDateDataItem struct {
@@ -217,11 +220,12 @@ func EditRangeChartInfoAndMapping(req *EditChartInfoReq, edbInfoIdStr, lang stri
 		}
 		if tmpChartEdbMapping != nil {
 			chartEdbMappingIdList = append(chartEdbMappingIdList, strconv.Itoa(tmpChartEdbMapping.ChartEdbMappingId))
-			//tmpChartEdbMapping.ModifyTime = time.Now()
+			tmpChartEdbMapping.ModifyTime = time.Now()
 			//tmpChartEdbMapping.MaxData = v.MaxData
 			//tmpChartEdbMapping.MinData = v.MinData
 			//tmpChartEdbMapping.IsOrder = v.IsOrder
-			//tmpChartEdbMapping.IsAxis = v.IsAxis
+			tmpChartEdbMapping.EdbAliasName = v.EdbAliasName
+			tmpChartEdbMapping.IsAxis = v.IsAxis
 			//tmpChartEdbMapping.EdbInfoType = v.EdbInfoType
 			//tmpChartEdbMapping.LeadValue = v.LeadValue
 			//tmpChartEdbMapping.LeadUnit = v.LeadUnit
@@ -229,15 +233,17 @@ func EditRangeChartInfoAndMapping(req *EditChartInfoReq, edbInfoIdStr, lang stri
 			//tmpChartEdbMapping.ChartColor = v.ChartColor
 			//tmpChartEdbMapping.PredictChartColor = v.PredictChartColor
 			//tmpChartEdbMapping.ChartWidth = v.ChartWidth
-			//_, err = to.Update(tmpChartEdbMapping, "ModifyTime", "MaxData", "MinData", "IsOrder", "IsAxis", "EdbInfoType", "LeadValue", "LeadUnit", "ChartStyle", "ChartColor", "PredictChartColor", "ChartWidth")
-			//if err != nil {
-			//	fmt.Println("chart_edb_mapping Err:" + err.Error())
-			//	return err
-			//}
+			_, err = to.Update(tmpChartEdbMapping, "ModifyTime", "IsAxis", "EdbAliasName")
+			if err != nil {
+				fmt.Println("chart_edb_mapping Err:" + err.Error())
+				return err
+			}
 		} else {
 			mapItem := new(ChartEdbMapping)
 			mapItem.ChartInfoId = req.ChartInfoId
 			mapItem.EdbInfoId = v.EdbInfoId
+			mapItem.EdbAliasName = v.EdbAliasName
+			mapItem.IsAxis = v.IsAxis
 			mapItem.CreateTime = time.Now()
 			mapItem.ModifyTime = time.Now()
 			timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
@@ -245,7 +251,6 @@ func EditRangeChartInfoAndMapping(req *EditChartInfoReq, edbInfoIdStr, lang stri
 			//mapItem.MaxData = v.MaxData
 			//mapItem.MinData = v.MinData
 			mapItem.IsOrder = true
-			mapItem.IsAxis = 1
 			mapItem.EdbInfoType = 1
 			//mapItem.LeadValue = v.LeadValue
 			//mapItem.LeadUnit = v.LeadUnit

+ 111 - 7
services/data/range_analysis/chart_info.go

@@ -214,9 +214,9 @@ func GetChartEdbInfoFormat(chartInfoId int, edbInfoMappingList []*data_manage.Ch
 }
 
 // GetChartDataByEdbInfoList 区间计算图表-根据指标信息获取x轴和y轴
-func GetChartDataByEdbInfoList(chartInfoId int, startDate, endDate string, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, req *data_manage.ChartRangeAnalysisExtraConf) (edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, dataResp data_manage.ChartRangeAnalysisDataResp, err error) {
+func GetChartDataByEdbInfoList(chartInfoId int, dateType, startYear int, startDate, endDate string, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, req *data_manage.ChartRangeAnalysisExtraConf) (edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, dataResp data_manage.ChartRangeAnalysisDataResp, err error) {
 	if chartInfoId > 0 && req.EdbInfoMode == 1 {
-		edbList, xEdbIdValue, dataResp, err = GetChartDataByEdbInfoListBySeries(chartInfoId, startDate, endDate, edbInfoMappingList, req)
+		edbList, xEdbIdValue, dataResp, err = GetChartDataByEdbInfoListBySeries(chartInfoId, dateType, startYear, startDate, endDate, edbInfoMappingList, req)
 		return
 	}
 	for _, edbInfoMapping := range edbInfoMappingList {
@@ -226,7 +226,46 @@ func GetChartDataByEdbInfoList(chartInfoId int, startDate, endDate string, edbIn
 		}
 		xEdbIdValue = append(xEdbIdValue, edbInfoMapping.EdbInfoId)
 	}
+	//根据时间类型来筛选最终的数据
+	yearMax := 0
+	if dateType == utils.DateTypeNYears {
+		for _, v := range edbInfoMappingList {
+			dataList := v.DataList.([]*data_manage.EdbDataList)
+			latestDate := dataList[0].DataTime
+			if latestDate != "" {
+				lastDateT, tErr := time.Parse(utils.FormatDate, latestDate)
+				if tErr != nil {
+					err = fmt.Errorf("获取图表日期信息失败,Err:" + tErr.Error())
+					return
+				}
+				if lastDateT.Year() > yearMax {
+					yearMax = lastDateT.Year()
+				}
+			}
+		}
+	}
+	startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, yearMax)
 
+	if startDate != "" {
+		for k, v := range edbInfoMappingList {
+			dataList := v.DataList.([]*data_manage.EdbDataList)
+			newDataList := make([]*data_manage.EdbDataList, 0)
+			if len(dataList) == 0 {
+				newDataList = dataList
+			} else {
+				for _, d := range dataList {
+					if endDate != "" && d.DataTime > endDate {
+						continue
+					}
+					if d.DataTime < startDate {
+						continue
+					}
+					newDataList = append(newDataList, d)
+				}
+			}
+			edbInfoMappingList[k].DataList = newDataList
+		}
+	}
 	dataResp = data_manage.ChartRangeAnalysisDataResp{ChartRangeAnalysisExtraConf: req}
 	edbList, err = GetChartEdbInfoFormat(chartInfoId, edbInfoMappingList)
 	if err != nil {
@@ -236,7 +275,7 @@ func GetChartDataByEdbInfoList(chartInfoId int, startDate, endDate string, edbIn
 	return
 }
 
-func GetChartDataByEdbInfoListBySeries(chartInfoId int, startDate, endDate string, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, req *data_manage.ChartRangeAnalysisExtraConf) (edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, dataResp data_manage.ChartRangeAnalysisDataResp, err error) {
+func GetChartDataByEdbInfoListBySeries(chartInfoId int, dateType, startYear int, startDate, endDate string, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, req *data_manage.ChartRangeAnalysisExtraConf) (edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, dataResp data_manage.ChartRangeAnalysisDataResp, err error) {
 	//查询seriesId
 	chartSeriesOb := new(data_manage.FactorEdbSeriesChartMapping)
 	seriesMappingItem, err := chartSeriesOb.GetItemByChartInfoId(chartInfoId)
@@ -261,8 +300,46 @@ func GetChartDataByEdbInfoListBySeries(chartInfoId int, startDate, endDate strin
 		edbInfoMapping.DataList = dataList
 		xEdbIdValue = append(xEdbIdValue, edbInfoMapping.EdbInfoId)
 	}
+	yearMax := 0
+	if dateType == utils.DateTypeNYears {
+		for _, v := range edbInfoMappingList {
+			dataList := v.DataList.([]*data_manage.EdbDataList)
+			latestDate := dataList[0].DataTime
+			if latestDate != "" {
+				lastDateT, tErr := time.Parse(utils.FormatDate, latestDate)
+				if tErr != nil {
+					err = fmt.Errorf("获取图表日期信息失败,Err:" + tErr.Error())
+					return
+				}
+				if lastDateT.Year() > yearMax {
+					yearMax = lastDateT.Year()
+				}
+			}
+		}
+	}
+	startDate, endDate = utils.GetDateByDateTypeV2(dateType, startDate, endDate, startYear, yearMax)
 
-	dataResp = data_manage.ChartRangeAnalysisDataResp{ChartRangeAnalysisExtraConf: req}
+	if startDate != "" {
+		for k, v := range edbInfoMappingList {
+			dataList := v.DataList.([]*data_manage.EdbDataList)
+			newDataList := make([]*data_manage.EdbDataList, 0)
+			if len(dataList) == 0 {
+				newDataList = dataList
+			} else {
+				for _, d := range dataList {
+					if endDate != "" && d.DataTime > endDate {
+						continue
+					}
+					if d.DataTime < startDate {
+						continue
+					}
+					newDataList = append(newDataList, d)
+				}
+			}
+			edbInfoMappingList[k].DataList = newDataList
+		}
+	}
+	dataResp = data_manage.ChartRangeAnalysisDataResp{ChartRangeAnalysisExtraConf: req, SeriesId: seriesMappingItem.FactorEdbSeriesId}
 	edbList, err = GetChartEdbInfoFormat(chartInfoId, edbInfoMappingList)
 	if err != nil {
 		err = fmt.Errorf("获取区间计算图表, 完善指标信息失败, Err:" + err.Error())
@@ -401,9 +478,35 @@ func getChartDataByEdbInfo(edbInfoMapping *data_manage.ChartEdbInfoMapping, req
 	}
 
 	if req.DataConvertType > 0 {
-		// todo 数据转换
+		// 数据转换类型 0不转, 1乘 2除 3对数
+		switch req.DataConvertType {
+		case 1:
+			for i, v := range newDataList {
+				newDataList[i].Value = v.Value * req.DataConvertConf.Value
+			}
+			//item.MaxData = item.MaxData * v.ConvertValue
+			//item.MinData = item.MinData * v.ConvertValue
+		case 2:
+			for i, v := range newDataList {
+				newDataList[i].Value = v.Value / req.DataConvertConf.Value
+			}
+			//item.MaxData = item.MaxData / v.ConvertValue
+			//item.MinData = item.MinData / v.ConvertValue
+		case 3:
+			for i, v := range newDataList {
+				if v.Value <= 0 {
+					err = errors.New("数据中含有负数或0,无法对数运算")
+					return
+				}
+				newDataList[i].Value = math.Log(v.Value) / math.Log(req.DataConvertConf.Value)
+			}
+			//item.MaxData = math.Log(item.MaxData) / math.Log(v.ConvertValue)
+			//item.MinData = math.Log(item.MinData) / math.Log(v.ConvertValue)
+		}
 	}
 	newEdbInfoMapping.DataList = newDataList
+	//时间处理
+
 	return
 }
 
@@ -703,12 +806,13 @@ func AddChartInfo(req data_manage.AddChartInfoReq, source int, sysUser *system.A
 		// todo 指标名称修改
 		mapItem := new(data_manage.ChartEdbMapping)
 		mapItem.EdbInfoId = v.EdbInfoId
+		mapItem.EdbAliasName = v.EdbAliasName
+		mapItem.IsAxis = v.IsAxis
 		mapItem.CreateTime = time.Now()
 		mapItem.ModifyTime = time.Now()
 		edbTimestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 		mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + edbTimestamp + "_" + strconv.Itoa(v.EdbInfoId))
 		mapItem.IsOrder = true
-		mapItem.IsAxis = 1
 		mapItem.EdbInfoType = 1
 		mapItem.Source = utils.CHART_SOURCE_RANGE_ANALYSIS
 		mapList = append(mapList, mapItem)
@@ -1604,7 +1708,7 @@ func FactorEdbStepCalculateRange(seriesId int, edbArr []int, extraConf data_mana
 		return
 	}
 
-	_, _, _, err = GetChartDataByEdbInfoList(0, "", "", edbInfoMappingList, &extraConf)
+	_, _, _, err = GetChartDataByEdbInfoList(0, 0, 0, "", "", edbInfoMappingList, &extraConf)
 	if err != nil {
 		err = fmt.Errorf("获取图表数据失败, ErrMsg: %v", err)
 		return