Explorar o código

上传至社区

xyxie hai 10 meses
pai
achega
3fec2f21b6

+ 2 - 0
models/chart_info.go

@@ -1020,6 +1020,8 @@ type AddChartReq struct {
 	EdbInfoDataList         []*AddEdbDataReq
 	ChartEdbMapping         []*ChartEdbMapping
 	EdbInfoCalculateMapping []*EdbInfoCalculateMapping
+	ChartSeries             []*ChartSeries
+	ChartSeriesEdbMapping   []*ChartSeriesEdbMapping
 	CreatorInfo             *system.Admin //创建者的账号信息
 	UploaderInfo            *system.Admin //上传者的账号信息
 }

+ 261 - 0
models/chart_series.go

@@ -0,0 +1,261 @@
+package models
+
+import (
+	"encoding/json"
+	"eta/eta_forum_hub/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type ChartSeries struct {
+	ChartSeriesId int       `orm:"column(chart_series_id);pk"`
+	SeriesName    string    `description:"系列名称"`
+	SeriesNameEn  string    `description:"系列英文名称"`
+	ChartInfoId   int       `description:"图表ID"`
+	ChartStyle    string    `description:"图表类型"`
+	ChartColor    string    `description:"颜色"`
+	ChartWidth    int       `description:"线条大小"`
+	IsPoint       int       `description:"是否用数据点展示(0 否,1是)"`
+	IsNumber      int       `description:"是否用数值展示(0 否,1是)"`
+	IsAxis        int       `description:"1:左轴,0:右轴"`
+	MaxData       float64   `description:"上限"`
+	MinData       float64   `description:"下限"`
+	IsOrder       bool      `description:"true:正序,false:逆序"`
+	CreateTime    time.Time `description:"创建时间"`
+	ModifyTime    time.Time `description:"修改时间"`
+}
+
+func (c *ChartSeries) TableName() string {
+	return "chart_series"
+}
+
+func GetChartSeriesByChartInfoId(chartInfoId int) (items []*ChartSeries, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := "SELECT * FROM chart_series WHERE chart_info_id = ?"
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&items)
+	return
+}
+
+// EditChartSeriesAndEdbMapping
+func EditChartSeriesAndEdbMapping(seriesList []*ChartSeries, seriesEdbInfoList []*ChartSeriesEdbMapping, chartInfoId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	// 获取已经存在的系列
+	series, err := GetChartSeriesByChartInfoId(chartInfoId)
+	if err != nil {
+		return
+	}
+	//整理成系列map
+	seriesMap := make(map[string]int)
+	seriesDeleteMap := make(map[string]struct{})
+	for _, v := range series {
+		seriesMap[v.SeriesName] = v.ChartSeriesId
+		seriesDeleteMap[v.SeriesName] = struct{}{}
+	}
+	// 删除所有的指标映射
+	_, err = o.Raw("DELETE FROM chart_series_edb_mapping WHERE chart_info_id = ?", chartInfoId).Exec()
+	if err != nil {
+		return
+	}
+
+	seriesEdbMap := make(map[int][]*ChartSeriesEdbMapping)
+	for _, v := range seriesEdbInfoList {
+		seriesEdbMap[v.ChartSeriesId] = append(seriesEdbMap[v.ChartSeriesId], v)
+	}
+
+	for _, v := range seriesList {
+		tmp := &ChartSeries{
+			SeriesName:   v.SeriesName,
+			SeriesNameEn: v.SeriesNameEn,
+			ChartInfoId:  chartInfoId,
+			ChartStyle:   v.ChartStyle,
+			ChartColor:   v.ChartColor,
+			ChartWidth:   v.ChartWidth,
+			IsPoint:      v.IsPoint,
+			IsNumber:     v.IsNumber,
+			IsAxis:       v.IsAxis,
+			MaxData:      v.MaxData,
+			MinData:      v.MinData,
+			ModifyTime:   time.Now(),
+		}
+		seriesId, ok := seriesMap[v.SeriesName]
+		if !ok {
+			//新增
+			tmp.CreateTime = time.Now()
+			seriesIdTmp, e := to.Insert(tmp)
+			if e != nil {
+				err = fmt.Errorf("AddChartSeries Err:" + e.Error())
+				return
+			}
+			seriesId = int(seriesIdTmp)
+		} else {
+			//编辑
+			tmp.ChartSeriesId = seriesId
+			delete(seriesDeleteMap, v.SeriesName)
+			_, e := to.Update(tmp)
+			if e != nil {
+				err = fmt.Errorf("UpdateChartSeries Err:" + e.Error())
+				return
+			}
+		}
+
+		addSeriesEdbList := make([]*ChartSeriesEdbMapping, 0)
+		mappingList, ok := seriesEdbMap[v.ChartSeriesId]
+		if ok {
+			for _, edbItem := range mappingList {
+				dateConfStrByte, e := json.Marshal(edbItem.DateConf)
+				if e != nil {
+					err = e
+					return
+				}
+				dateConfStr := string(dateConfStrByte)
+				edbTmp := &ChartSeriesEdbMapping{
+					ChartSeriesId: seriesId,    //todo 系列ID
+					ChartInfoId:   chartInfoId, //todo 表图ID
+					EdbInfoId:     edbItem.EdbInfoId,
+					//EdbAliasName:            "",
+					//EdbAliasNameEn:          "",
+					DateConfName: edbItem.DateConfName,
+					DateConf:     dateConfStr,
+					DateConfType: edbItem.DateConfType,
+					CreateTime:   time.Now(),
+					ModifyTime:   time.Now(),
+				}
+				addSeriesEdbList = append(addSeriesEdbList, edbTmp)
+			}
+			if len(addSeriesEdbList) > 0 {
+				_, err = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
+				if err != nil {
+					err = fmt.Errorf("AddChartSeries Err:" + err.Error())
+					return
+				}
+			}
+		}
+	}
+	//删除旧的系列和ID
+	seriesNames := make([]string, 0)
+	for name, _ := range seriesDeleteMap {
+		seriesNames = append(seriesNames, name)
+	}
+	if len(seriesNames) > 0 {
+		sql := `DELETE FROM chart_series WHERE series_name IN (` + utils.GetOrmInReplace(len(seriesNames)) + `) and chart_info_id=?`
+		_, err = to.Raw(sql, seriesNames, chartInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除系列失败 Err:" + err.Error())
+			return
+		}
+	}
+
+	return
+}
+
+func AddChartSeriesAndEdbMapping(seriesList []*ChartSeries, seriesEdbInfoList []*ChartSeriesEdbMapping, chartInfoId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	seriesEdbMap := make(map[int][]*ChartSeriesEdbMapping)
+	for _, v := range seriesEdbInfoList {
+		seriesEdbMap[v.ChartSeriesId] = append(seriesEdbMap[v.ChartSeriesId], v)
+	}
+	for _, v := range seriesList {
+		tmp := &ChartSeries{
+			SeriesName:   v.SeriesName,
+			SeriesNameEn: v.SeriesNameEn,
+			ChartInfoId:  chartInfoId,
+			ChartStyle:   v.ChartStyle,
+			ChartColor:   v.ChartColor,
+			ChartWidth:   v.ChartWidth,
+			IsPoint:      v.IsPoint,
+			IsNumber:     v.IsNumber,
+			IsAxis:       v.IsAxis,
+			MaxData:      v.MaxData,
+			MinData:      v.MinData,
+			CreateTime:   time.Now(),
+			ModifyTime:   time.Now(),
+		}
+		seriesIdTmp, e := to.Insert(tmp)
+		if e != nil {
+			err = fmt.Errorf("AddChartSeries Err:" + e.Error())
+			return
+		}
+		seriesId := int(seriesIdTmp)
+		addSeriesEdbList := make([]*ChartSeriesEdbMapping, 0)
+		mappingList, ok := seriesEdbMap[v.ChartSeriesId]
+		if ok {
+			for _, edbItem := range mappingList {
+				dateConfStrByte, e := json.Marshal(edbItem.DateConf)
+				if e != nil {
+					err = e
+					return
+				}
+				dateConfStr := string(dateConfStrByte)
+				edbTmp := &ChartSeriesEdbMapping{
+					ChartSeriesId: seriesId,    //todo 系列ID
+					ChartInfoId:   chartInfoId, //todo 表图ID
+					EdbInfoId:     edbItem.EdbInfoId,
+					//EdbAliasName:            "",
+					//EdbAliasNameEn:          "",
+					DateConfName: edbItem.DateConfName,
+					DateConfType: edbItem.DateConfType,
+					DateConf:     dateConfStr,
+					CreateTime:   time.Now(),
+					ModifyTime:   time.Now(),
+				}
+				addSeriesEdbList = append(addSeriesEdbList, edbTmp)
+			}
+			if len(addSeriesEdbList) > 0 {
+				_, e = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
+				if e != nil {
+					err = fmt.Errorf("AddChartSeries Err:" + e.Error())
+					return
+				}
+			}
+		}
+	}
+	return
+}
+
+func DeleteChartSeriesAndEdbMapping(chartInfoId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	sql := ` DELETE FROM chart_series WHERE chart_info_id=? `
+	_, err = to.Raw(sql, chartInfoId).Exec()
+	if err != nil {
+		return
+	}
+	sql = ` DELETE FROM  chart_series_edb_mapping WHERE chart_info_id=? `
+	_, err = to.Raw(sql, chartInfoId).Exec()
+	return
+}

+ 31 - 0
models/chart_series_edb_mapping.go

@@ -0,0 +1,31 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type ChartSeriesEdbMapping struct {
+	ChartSeriesEdbMappingId int       `orm:"column(chart_series_edb_mapping_id);pk"`
+	ChartSeriesId           int       `description:"系列ID"`
+	ChartInfoId             int       `description:"图表ID"`
+	EdbInfoId               int       `description:"指标id"`
+	EdbAliasName            string    `description:"中文别名"`
+	EdbAliasNameEn          string    `description:"英文别名"`
+	DateConfName            string    `description:"引用日期配置名称"`
+	DateConfType            int       `description:"日期类型,0指标最新日期, 1引用日期"`
+	DateConf                string    `description:"日期配置名称"`
+	ModifyTime              time.Time `description:"修改时间"`
+	CreateTime              time.Time `description:"创建时间"`
+}
+
+func (c *ChartSeriesEdbMapping) TableName() string {
+	return "chart_series_edb_mapping"
+}
+
+func GetChartSeriesEdbByChartInfoId(chartInfoId int) (items []*ChartSeriesEdbMapping, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := "SELECT * FROM chart_series_edb_mapping WHERE chart_info_id = ?"
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&items)
+	return
+}

+ 16 - 0
services/chart_info.go

@@ -242,6 +242,14 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 		err = errors.New("保存图表失败,Err:" + err.Error())
 		return
 	}
+	if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
+		err = models.AddChartSeriesAndEdbMapping(req.ChartSeries, req.ChartSeriesEdbMapping, chartInfo.ChartInfoId)
+		if err != nil {
+			errMsg = `保存失败`
+			err = errors.New("保存失败,Err:" + err.Error())
+			return
+		}
+	}
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 
@@ -530,6 +538,14 @@ func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRe
 		err = errors.New("保存图表配置失败,Err:" + err.Error())
 		return
 	}
+	if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
+		err = models.EditChartSeriesAndEdbMapping(req.ChartSeries, req.ChartSeriesEdbMapping, chartInfo.ChartInfoId)
+		if err != nil {
+			errMsg = "保存失败"
+			err = errors.New("保存失败,Err:" + err.Error())
+			return
+		}
+	}
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 

+ 1 - 0
utils/constants.go

@@ -217,6 +217,7 @@ const (
 	CHART_SOURCE_ROLLING_CORRELATION = 4  // 滚动相关性图表
 	CHART_SOURCE_FUTURE_GOOD_PROFIT  = 5  // 商品利润曲线
 	CHART_TYPE_RADAR                 = 11 //雷达图
+	CHART_TYPE_SECTION_COMBINE       = 14 //截面组合图
 )
 
 // MonthQuarterMap 月份与季度的map