123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729 |
- package services
- import (
- "encoding/json"
- "errors"
- "eta/eta_forum_hub/models"
- "eta/eta_forum_hub/models/chart_collect"
- "eta/eta_forum_hub/models/system"
- "eta/eta_forum_hub/services/alarm_msg"
- "eta/eta_forum_hub/utils"
- "fmt"
- "sort"
- "strconv"
- "strings"
- "time"
- )
- // AddChartInfo 添加图表
- func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string) (chartInfo *models.ChartInfo, err error, errMsg string, isSendEmail bool) {
- defer func() {
- if err != nil {
- utils.FileLog.Info("添加图表失败, AddChartInfo Msg: " + errMsg + ", Err: " + err.Error())
- go alarm_msg.SendAlarmMsg("添加图表失败, AddChartInfo Msg: "+errMsg+", Err: "+err.Error(), 3)
- }
- }()
- isSendEmail = true // 默认错误的时候要发送邮件
- req.ChartInfo.ChartName = strings.Trim(req.ChartInfo.ChartName, " ")
- if req.ChartInfo.ChartName == "" {
- errMsg = "请填写图表名称!"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- //判断图表是否存在
- var condition string
- var pars []interface{}
- // todo 判断同一个平台上的图表是否重复
- condition += " AND chart_name=? AND source = ? "
- pars = append(pars, req.ChartInfo.ChartName, req.ChartInfo.Source)
- count, err := models.GetChartInfoCountByCondition(condition, pars)
- if err != nil {
- errMsg = "判断图表名称是否存在失败"
- err = errors.New("判断图表名称是否存在失败,Err:" + err.Error())
- return
- }
- if count > 0 {
- errMsg = "图表已存在"
- err = errors.New("图表已存在")
- isSendEmail = false
- return
- }
- // 添加指标数据
- err = BatchAddOrUpdateEdbData(req.EdbInfoDataList)
- if err != nil {
- errMsg = "添加指标数据失败"
- err = errors.New("添加指标数据失败,Err:" + err.Error())
- return
- }
- // 查询指标ID和指标编码之间的关系
- originEdbInfoIdMap := make(map[int]string)
- for _, v := range req.EdbInfoList {
- originEdbInfoIdMap[v.EdbInfoId] = v.EdbCode
- }
- // 添加关联指标
- var edbInfoIdArr []int
- edbInfoList := make([]*models.EdbInfo, 0)
- edbInfoList, err, errMsg, isSendEmail = BatchAddOrUpdateEdbInfo(req.EdbInfoList, req.EdbInfoCalculateMapping, sysUserId, sysUserRealName)
- if err != nil {
- errMsg = "添加关联指标失败"
- err = errors.New("添加关联指标失败,Err:" + err.Error())
- return
- }
- edbCodeMap := make(map[string]*models.EdbInfo, 0)
- for _, v := range edbInfoList {
- edbCodeMap[v.EdbCode] = v
- edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
- }
- // todo 批量新增指标
- sort.Ints(edbInfoIdArr)
- var edbInfoIdArrStr []string
- for _, v := range edbInfoIdArr {
- edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
- }
- edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
- chartInfo = new(models.ChartInfo)
- chartInfo.SysUserId = req.ChartInfo.SysUserId
- chartInfo.SysUserRealName = req.ChartInfo.SysUserRealName
- // 查询创建者信息
- if req.CreatorInfo != nil {
- creator, _ := system.GetAdminByAdminName(req.CreatorInfo.AdminName)
- if creator != nil {
- chartInfo.SysUserId = creator.AdminId
- chartInfo.SysUserRealName = creator.RealName
- }
- }
- // 查询上传者信息
- if req.UploaderInfo != nil {
- uploader, _ := system.GetAdminByAdminName(req.UploaderInfo.AdminName)
- if uploader != nil {
- chartInfo.UploadUserId = uploader.AdminId
- chartInfo.UploadUserRealName = uploader.RealName
- }
- }
- chartInfo.ChartName = req.ChartInfo.ChartName
- chartInfo.EdbInfoIds = edbInfoIdStr
- chartInfo.CreateTime = time.Now()
- chartInfo.ModifyTime = time.Now()
- chartInfo.IsSetName = req.ChartInfo.IsSetName
- //timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
- // todo 是否需要单独生成一个指标图表序列ID
- //chartInfo.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
- chartInfo.UniqueCode = req.ChartInfo.UniqueCode
- chartInfo.DateType = req.ChartInfo.DateType
- chartInfo.ChartType = req.ChartInfo.ChartType
- calendar := req.ChartInfo.Calendar
- chartInfo.Calendar = calendar
- chartInfo.StartDate = req.ChartInfo.StartDate
- chartInfo.EndDate = req.ChartInfo.EndDate
- chartInfo.SeasonStartDate = req.ChartInfo.StartDate
- chartInfo.SeasonEndDate = req.ChartInfo.EndDate
- chartInfo.LeftMin = req.ChartInfo.LeftMin
- chartInfo.LeftMax = req.ChartInfo.LeftMax
- chartInfo.RightMin = req.ChartInfo.RightMin
- chartInfo.RightMax = req.ChartInfo.RightMax
- chartInfo.Right2Min = req.ChartInfo.Right2Min
- chartInfo.Right2Max = req.ChartInfo.Right2Max
- chartInfo.MinMaxSave = req.ChartInfo.MinMaxSave
- chartInfo.Disabled = req.ChartInfo.Disabled
- chartInfo.BarConfig = req.ChartInfo.BarConfig
- chartInfo.ExtraConfig = req.ChartInfo.ExtraConfig
- chartInfo.SeasonExtraConfig = req.ChartInfo.SeasonExtraConfig
- chartInfo.StartYear = req.ChartInfo.StartYear
- chartInfo.Source = req.ChartInfo.Source
- chartInfo.ChartThemeId = req.ChartInfo.ChartThemeId
- chartInfo.SourcesFrom = req.ChartInfo.SourcesFrom
- chartInfo.Instructions = req.ChartInfo.Instructions
- chartInfo.MarkersLines = req.ChartInfo.MarkersLines
- chartInfo.MarkersAreas = req.ChartInfo.MarkersAreas
- chartInfo.Unit = req.ChartInfo.Unit
- chartInfo.UnitEn = req.ChartInfo.UnitEn
- chartInfo.Description = req.Description
- chartInfo.ChartImage = req.ChartInfo.ChartImage
- /*newId, err := models.AddChartInfo(chartInfo)
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存失败,Err:" + err.Error())
- return
- }
- chartInfo.ChartInfoId = int(newId)*/
- // todo 先整理好指标信息,生成指标ID,再将图表和指标ID进行绑定
- chartEdbInfoList := req.ChartEdbMapping
- mapList := make([]*models.ChartEdbMapping, 0)
- newEdbInfoIdMap := make(map[int]int) // ETA系统和ETA社区指标ID的映射关系
- for _, v := range chartEdbInfoList {
- mapItem := new(models.ChartEdbMapping)
- //mapItem.ChartInfoId = int(newId)
- edbCode, ok := originEdbInfoIdMap[v.EdbInfoId]
- if !ok {
- err = fmt.Errorf("指标代码不存在,EdbCode:%s", v.EdbCode)
- errMsg = "指标代码不存在"
- return
- }
- edbBase, ok := edbCodeMap[edbCode]
- if !ok {
- err = fmt.Errorf("指标代码不存在,EdbCode:%s", v.EdbCode)
- errMsg = "指标代码不存在"
- return
- }
- mapItem.EdbInfoId = edbBase.EdbInfoId
- mapItem.CreateTime = time.Now()
- mapItem.ModifyTime = time.Now()
- //timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
- //mapItem.UniqueCode = utils.MD5(fmt.Sprint(utils.CHART_PREFIX, "_", edbBase.EdbInfoId, "_", timestamp))
- mapItem.UniqueCode = v.UniqueCode
- mapItem.MaxData = v.MaxData
- mapItem.MinData = v.MinData
- mapItem.IsOrder = v.IsOrder
- mapItem.IsAxis = v.IsAxis
- mapItem.EdbInfoType = v.EdbInfoType
- mapItem.LeadValue = v.LeadValue
- mapItem.LeadUnit = v.LeadUnit
- mapItem.ChartStyle = v.ChartStyle
- mapItem.ChartColor = v.ChartColor
- mapItem.PredictChartColor = v.PredictChartColor
- mapItem.ChartWidth = v.ChartWidth
- mapItem.Source = v.Source
- mapItem.EdbAliasName = v.EdbAliasName
- mapItem.IsConvert = v.IsConvert
- mapItem.ConvertType = v.ConvertType
- mapItem.ConvertValue = v.ConvertValue
- mapItem.ConvertUnit = v.ConvertUnit
- mapItem.ConvertEnUnit = v.ConvertEnUnit
- mapItem.EdbCode = edbCode
- mapList = append(mapList, mapItem)
- newEdbInfoIdMap[v.EdbInfoId] = mapItem.EdbInfoId
- }
- if len(mapList) <= 0 {
- errMsg = `图表指标映射不能为空`
- err = errors.New("图表指标映射不能为空")
- return
- }
- /*err = models.AddChartEdbMapping(mapList)
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存失败,Err:" + err.Error())
- return
- }*/
- extraConfig := chartInfo.ExtraConfig
- barConfig := chartInfo.BarConfig
- updateExtraConfigFlag := false
- //更新图表配置里的config信息
- e, _ := transferChartConfigEdbInfoId(chartInfo, newEdbInfoIdMap)
- if e == nil {
- //更新图表的特殊字段
- if chartInfo.ExtraConfig != extraConfig || chartInfo.BarConfig != barConfig {
- updateExtraConfigFlag = true
- /*err = chartInfo.Update([]string{"ExtraConfig", "BarConfig"})
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存图表配置失败,Err:" + err.Error())
- return
- }*/
- }
- }
- err = models.AddChartInfoAndMapping(chartInfo, mapList, updateExtraConfigFlag)
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存图表失败,Err:" + err.Error())
- return
- }
- if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
- err = models.AddChartSeriesAndEdbMapping(req.ChartSeries, req.ChartSeriesEdbMapping, chartInfo.ChartInfoId, newEdbInfoIdMap)
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存失败,Err:" + err.Error())
- return
- }
- }
- //添加es数据
- go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
- return
- }
- // UpdateChartInfoAndEdbInfo 刷新图表信息和指标信息
- func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string) (chartInfo *models.ChartInfo, err error, errMsg string, isSendEmail bool) {
- defer func() {
- if err != nil {
- utils.FileLog.Info("刷新图表信息和指标信息失败, AddChartInfo Msg: " + errMsg + ", Err: " + err.Error())
- go alarm_msg.SendAlarmMsg("刷新图表信息和指标信息失败, AddChartInfo Msg: "+errMsg+", Err: "+err.Error(), 3)
- }
- }()
- isSendEmail = true // 默认错误的时候要发送邮件
- req.ChartInfo.ChartName = strings.Trim(req.ChartInfo.ChartName, " ")
- if req.ChartInfo.ChartName == "" {
- errMsg = "请填写图表名称!"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- chartInfo, err = models.GetChartInfoById(req.ChartInfo.ChartInfoId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- errMsg = "图表已被删除,请刷新页面"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- errMsg = "获取图表信息失败"
- err = errors.New("获取图表信息失败,Err:" + err.Error())
- return
- }
- //判断图表是否存在
- var condition string
- var pars []interface{}
- // todo 判断同一个平台上的图表是否重复
- condition += " AND chart_name=? AND source = ? AND chart_info_id<>? "
- pars = append(pars, req.ChartInfo.ChartName, req.ChartInfo.Source, req.ChartInfo.ChartInfoId)
- count, err := models.GetChartInfoCountByCondition(condition, pars)
- if err != nil {
- errMsg = "判断图表名称是否存在失败"
- err = errors.New("判断图表名称是否存在失败,Err:" + err.Error())
- return
- }
- if count > 0 {
- errMsg = "图表已存在"
- err = errors.New("图表已存在")
- isSendEmail = false
- return
- }
- // 添加指标数据
- err = BatchAddOrUpdateEdbData(req.EdbInfoDataList)
- if err != nil {
- errMsg = "添加指标数据失败"
- err = errors.New("添加指标数据失败,Err:" + err.Error())
- return
- }
- // 查询指标ID和指标编码之间的关系
- originEdbInfoIdMap := make(map[int]string)
- for _, v := range req.EdbInfoList {
- originEdbInfoIdMap[v.EdbInfoId] = v.EdbCode
- }
- // 添加关联指标
- var edbInfoIdArr []int
- edbInfoList := make([]*models.EdbInfo, 0)
- edbInfoList, err, errMsg, isSendEmail = BatchAddOrUpdateEdbInfo(req.EdbInfoList, req.EdbInfoCalculateMapping, sysUserId, sysUserRealName)
- if err != nil {
- errMsg = "添加关联指标失败"
- err = errors.New("添加关联指标失败,Err:" + err.Error())
- return
- }
- edbCodeMap := make(map[string]*models.EdbInfo, 0)
- for _, v := range edbInfoList {
- edbCodeMap[v.EdbCode] = v
- edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
- }
- // todo 批量新增指标
- sort.Ints(edbInfoIdArr)
- var edbInfoIdArrStr []string
- for _, v := range edbInfoIdArr {
- edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
- }
- edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
- chartInfo.ChartName = req.ChartInfo.ChartName
- chartInfo.EdbInfoIds = edbInfoIdStr
- chartInfo.ModifyTime = time.Now()
- chartInfo.IsSetName = req.ChartInfo.IsSetName
- chartInfo.DateType = req.ChartInfo.DateType
- chartInfo.ChartType = req.ChartInfo.ChartType
- calendar := req.ChartInfo.Calendar
- chartInfo.Calendar = calendar
- chartInfo.StartDate = req.ChartInfo.StartDate
- chartInfo.EndDate = req.ChartInfo.EndDate
- chartInfo.SeasonStartDate = req.ChartInfo.StartDate
- chartInfo.SeasonEndDate = req.ChartInfo.EndDate
- chartInfo.LeftMin = req.ChartInfo.LeftMin
- chartInfo.LeftMax = req.ChartInfo.LeftMax
- chartInfo.RightMin = req.ChartInfo.RightMin
- chartInfo.RightMax = req.ChartInfo.RightMax
- chartInfo.Right2Min = req.ChartInfo.Right2Min
- chartInfo.Right2Max = req.ChartInfo.Right2Max
- chartInfo.MinMaxSave = req.ChartInfo.MinMaxSave
- chartInfo.Disabled = req.ChartInfo.Disabled
- chartInfo.BarConfig = req.ChartInfo.BarConfig
- chartInfo.ExtraConfig = req.ChartInfo.ExtraConfig
- chartInfo.SeasonExtraConfig = req.ChartInfo.SeasonExtraConfig
- chartInfo.StartYear = req.ChartInfo.StartYear
- chartInfo.Source = req.ChartInfo.Source
- chartInfo.ChartThemeId = req.ChartInfo.ChartThemeId
- chartInfo.SourcesFrom = req.ChartInfo.SourcesFrom
- chartInfo.Instructions = req.ChartInfo.Instructions
- chartInfo.MarkersLines = req.ChartInfo.MarkersLines
- chartInfo.MarkersAreas = req.ChartInfo.MarkersAreas
- chartInfo.Unit = req.ChartInfo.Unit
- chartInfo.UnitEn = req.ChartInfo.UnitEn
- chartInfo.ChartImage = req.ChartInfo.ChartImage
- chartInfo.SysUserId = req.ChartInfo.SysUserId
- chartInfo.SysUserRealName = req.ChartInfo.SysUserRealName
- // 查询创建者信息
- if req.CreatorInfo != nil {
- creator, _ := system.GetAdminByAdminName(req.CreatorInfo.AdminName)
- if creator != nil {
- chartInfo.SysUserId = creator.AdminId
- chartInfo.SysUserRealName = creator.RealName
- }
- }
- /*err = chartInfo.Update([]string{})
- if err != nil {
- errMsg = `更新失败`
- err = errors.New("更新失败,Err:" + err.Error())
- return
- }*/
- // 处理映射,已存在的映射直接更新,不存在的映射再新增,同时删除旧的映射关系
- oldChartEdbMappingList, err := models.GetChartEdbMappingListV2(chartInfo.ChartInfoId)
- oldMappingIdMap := make(map[string]*models.ChartEdbMapping)
- removeMapping := make(map[int]struct{})
- for _, v := range oldChartEdbMappingList {
- name := fmt.Sprintf("%s-%d", v.EdbCode, v.Source)
- oldMappingIdMap[name] = v
- removeMapping[v.ChartEdbMappingId] = struct{}{}
- }
- // todo 先整理好指标信息,生成指标ID,再将图表和指标ID进行绑定
- chartEdbInfoList := req.ChartEdbMapping
- addMappingList := make([]*models.ChartEdbMapping, 0)
- updateMappingList := make([]*models.ChartEdbMapping, 0)
- newEdbInfoIdMap := make(map[int]int) // ETA系统和ETA社区指标ID的映射关系
- for _, v := range chartEdbInfoList {
- mapItem := new(models.ChartEdbMapping)
- mapItem.ChartInfoId = chartInfo.ChartInfoId
- edbCode, ok := originEdbInfoIdMap[v.EdbInfoId]
- if !ok {
- err = fmt.Errorf("指标代码不存在,EdbCode:%s", v.EdbCode)
- errMsg = "指标代码不存在"
- return
- }
- edbBase, ok := edbCodeMap[edbCode]
- if !ok {
- err = fmt.Errorf("指标代码不存在,EdbCode:%s", v.EdbCode)
- errMsg = "指标代码不存在"
- return
- }
- // 判断是否已经存在映射关系
- existName := fmt.Sprintf("%s-%d", edbCode, v.Source)
- if oldMapping, ok1 := oldMappingIdMap[existName]; ok1 {
- //更新映射关系
- mapItem = oldMapping
- mapItem.ModifyTime = time.Now()
- mapItem.MaxData = v.MaxData
- mapItem.MinData = v.MinData
- mapItem.IsOrder = v.IsOrder
- mapItem.IsAxis = v.IsAxis
- mapItem.EdbInfoType = v.EdbInfoType
- mapItem.LeadValue = v.LeadValue
- mapItem.LeadUnit = v.LeadUnit
- mapItem.ChartStyle = v.ChartStyle
- mapItem.ChartColor = v.ChartColor
- mapItem.PredictChartColor = v.PredictChartColor
- mapItem.ChartWidth = v.ChartWidth
- mapItem.Source = v.Source
- mapItem.EdbAliasName = v.EdbAliasName
- mapItem.IsConvert = v.IsConvert
- mapItem.ConvertType = v.ConvertType
- mapItem.ConvertValue = v.ConvertValue
- mapItem.ConvertUnit = v.ConvertUnit
- mapItem.ConvertEnUnit = v.ConvertEnUnit
- mapItem.EdbCode = edbCode
- /*err = mapItem.Update([]string{})
- if err != nil {
- errMsg = `更新失败`
- err = errors.New("更新图表指标映射关系失败,Err:" + err.Error())
- return
- }*/
- updateMappingList = append(updateMappingList, mapItem)
- delete(removeMapping, mapItem.ChartEdbMappingId)
- } else {
- mapItem.EdbInfoId = edbBase.EdbInfoId
- mapItem.CreateTime = time.Now()
- mapItem.ModifyTime = time.Now()
- timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
- mapItem.UniqueCode = utils.MD5(fmt.Sprint(utils.CHART_PREFIX, "_", edbBase.EdbInfoId, "_", timestamp))
- mapItem.MaxData = v.MaxData
- mapItem.MinData = v.MinData
- mapItem.IsOrder = v.IsOrder
- mapItem.IsAxis = v.IsAxis
- mapItem.EdbInfoType = v.EdbInfoType
- mapItem.LeadValue = v.LeadValue
- mapItem.LeadUnit = v.LeadUnit
- mapItem.ChartStyle = v.ChartStyle
- mapItem.ChartColor = v.ChartColor
- mapItem.PredictChartColor = v.PredictChartColor
- mapItem.ChartWidth = v.ChartWidth
- mapItem.Source = v.Source
- mapItem.EdbAliasName = v.EdbAliasName
- mapItem.IsConvert = v.IsConvert
- mapItem.ConvertType = v.ConvertType
- mapItem.ConvertValue = v.ConvertValue
- mapItem.ConvertUnit = v.ConvertUnit
- mapItem.ConvertEnUnit = v.ConvertEnUnit
- mapItem.EdbCode = edbCode
- addMappingList = append(addMappingList, mapItem)
- }
- newEdbInfoIdMap[v.EdbInfoId] = mapItem.EdbInfoId
- }
- /*if len(addMappingList) > 0 {
- err = models.AddChartEdbMapping(addMappingList)
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存失败,Err:" + err.Error())
- return
- }
- }*/
- // 删除原先的绑定关系
- removeIdStr := ""
- if len(removeMapping) > 0 {
- removeIdList := make([]string, 0) //需要移除的日期
- for k, _ := range removeMapping {
- removeIdList = append(removeIdList, fmt.Sprint(k))
- }
- removeIdStr = strings.Join(removeIdList, `","`)
- removeIdStr = `"` + removeIdStr + `"`
- /*err = models.DeleteChartEdbMappingByChartEdbMappingId(removeIdStr)
- if err != nil {
- errMsg = `删除失败`
- err = errors.New("删除失败,Err:" + err.Error())
- return
- }*/
- }
- extraConfig := chartInfo.ExtraConfig
- barConfig := chartInfo.BarConfig
- updateExtraConfigFlag := false
- //更新图表配置里的config信息
- e, _ := transferChartConfigEdbInfoId(chartInfo, newEdbInfoIdMap)
- if e == nil {
- //更新图表的特殊字段
- if chartInfo.ExtraConfig != extraConfig || chartInfo.BarConfig != barConfig {
- updateExtraConfigFlag = true
- /*err = chartInfo.Update([]string{"ExtraConfig", "BarConfig"})
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存图表配置失败,Err:" + err.Error())
- return
- }*/
- }
- }
- err = models.ModifyChartInfoAndMapping(chartInfo, addMappingList, updateMappingList, removeIdStr, updateExtraConfigFlag)
- if err != nil {
- errMsg = `保存失败`
- err = errors.New("保存图表配置失败,Err:" + err.Error())
- return
- }
- if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
- err = models.EditChartSeriesAndEdbMapping(req.ChartSeries, req.ChartSeriesEdbMapping, chartInfo.ChartInfoId, newEdbInfoIdMap)
- if err != nil {
- errMsg = "保存失败"
- err = errors.New("保存失败,Err:" + err.Error())
- return
- }
- }
- //添加es数据
- go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
- go EsAddOrEditChartCollectByChartInfoId(chartInfo.ChartInfoId)
- return
- }
- // 删除图表信息
- func DeleteChart(chartInfoId int) (err error, errMsg string) {
- //删除图表
- chartInfo, err := models.GetChartInfoById(chartInfoId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- errMsg = "图表已删除,请刷新页面"
- err = fmt.Errorf("图表不存在,Err:" + err.Error())
- return
- } else {
- errMsg = "删除失败"
- err = fmt.Errorf("删除失败, 获取图表信息失败Err:" + err.Error())
- return
- }
- }
- if chartInfo == nil {
- errMsg = "图表已删除,请刷新页面"
- err = fmt.Errorf(errMsg)
- return
- }
- // 处理映射,已存在的映射直接更新,不存在的映射再新增,同时删除旧的映射关系
- oldChartEdbMappingList, err := models.GetChartEdbMappingListV2(chartInfo.ChartInfoId)
- edbInfoIds := make([]int, 0)
- for _, v := range oldChartEdbMappingList {
- edbInfoIds = append(edbInfoIds, v.EdbInfoId)
- }
- //删除图表及关联指标
- err = models.DeleteChartInfoAndData(chartInfo.ChartInfoId)
- if err != nil {
- errMsg = "删除失败"
- err = fmt.Errorf("删除图表数据失败, Err:" + err.Error())
- return
- }
- if chartInfo.ChartType == utils.CHART_TYPE_SECTION_COMBINE {
- err = models.DeleteChartSeriesAndEdbMapping(chartInfo.ChartInfoId)
- if err != nil {
- errMsg = "删除失败"
- err = fmt.Errorf("删除图表系列数据失败, Err:" + err.Error())
- return
- }
- }
- err, errMsg = BatchDeleteEdbInfo(edbInfoIds)
- if err != nil {
- errMsg = "删除失败"
- err = fmt.Errorf("删除指标数据失败, Err:" + err.Error())
- return
- }
- go EsDeleteChartInfo(chartInfo.ChartInfoId)
- go func() {
- var e error
- defer func() {
- if e != nil {
- utils.FileLog.Info("删除图表收藏数据失败, Err:" + e.Error())
- }
- }()
- // 查询所有的收藏图表数据
- userChartCollect := make([]string, 0)
- chartCollectList, e := chart_collect.GetChartCollectListByChartInfoId(chartInfo.ChartInfoId)
- if e != nil {
- e = fmt.Errorf("查询图表收藏数据失败, Err:" + e.Error())
- return
- }
- for _, v := range chartCollectList {
- userChartCollect = append(userChartCollect, fmt.Sprintf("%d_%d", v.UserId, v.ChartInfoId))
- }
- if len(userChartCollect) > 0 {
- EsDeleteChartCollectByChartInfoIdUserIds(userChartCollect)
- }
- }()
- return
- }
- func transferChartConfigEdbInfoId(chartInfo *models.ChartInfo, newEdbInfoIdMap map[int]int) (err error, errMsg string) {
- chartType := chartInfo.ChartType
- switch chartType {
- case 7: // 柱形图
- var barConfig models.BarChartInfoReq
- if chartInfo.BarConfig == `` {
- errMsg = "柱方图未配置"
- err = errors.New(errMsg)
- return
- }
- err = json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
- if err != nil {
- errMsg = "柱方图配置异常"
- err = errors.New(errMsg)
- return
- }
- //替换里面的edbInfoId
- for i := 0; i < len(barConfig.EdbInfoIdList); i++ {
- if newId, ok := newEdbInfoIdMap[barConfig.EdbInfoIdList[i].EdbInfoId]; ok {
- barConfig.EdbInfoIdList[i].EdbInfoId = newId
- }
- }
- for i := 0; i < len(barConfig.XEdbList); i++ {
- if newId, ok := newEdbInfoIdMap[barConfig.XEdbList[i].EdbInfoId]; ok {
- barConfig.XEdbList[i].EdbInfoId = newId
- }
- }
- for i := 0; i < len(barConfig.YEdbList); i++ {
- if newId, ok := newEdbInfoIdMap[barConfig.YEdbList[i].EdbInfoId]; ok {
- barConfig.YEdbList[i].EdbInfoId = newId
- }
- }
- configStr, e := json.Marshal(barConfig)
- if e != nil {
- errMsg = "柱方图配置异常"
- err = errors.New(errMsg + "json.Marshal 失败" + e.Error())
- return
- }
- chartInfo.BarConfig = string(configStr)
- return
- case 10: // 截面散点图
- var tmpExtraConfig models.SectionScatterReq
- if chartInfo.ExtraConfig == `` {
- errMsg = "截面散点图未配置"
- err = errors.New(errMsg)
- return
- }
- err = json.Unmarshal([]byte(chartInfo.ExtraConfig), &tmpExtraConfig)
- if err != nil {
- errMsg = "截面散点配置异常"
- err = errors.New(errMsg)
- return
- }
- //替换里面的edbInfoId
- for i := 0; i < len(tmpExtraConfig.SeriesList); i++ {
- for j := 0; j < len(tmpExtraConfig.SeriesList[i].EdbInfoList); j++ {
- if newId, ok := newEdbInfoIdMap[tmpExtraConfig.SeriesList[i].EdbInfoList[j].XEdbInfoId]; ok {
- tmpExtraConfig.SeriesList[i].EdbInfoList[j].XEdbInfoId = newId
- }
- if newId, ok := newEdbInfoIdMap[tmpExtraConfig.SeriesList[i].EdbInfoList[j].YEdbInfoId]; ok {
- tmpExtraConfig.SeriesList[i].EdbInfoList[j].YEdbInfoId = newId
- }
- }
- }
- configStr, e := json.Marshal(tmpExtraConfig)
- if e != nil {
- errMsg = "截面散点配置异常"
- err = errors.New(errMsg + "json.Marshal 失败" + e.Error())
- return
- }
- chartInfo.ExtraConfig = string(configStr)
- return
- case utils.CHART_TYPE_SECTION_COMBINE:
- // 预览和详情都走这个接口
- var sectionExtraConfig models.ChartSectionAllExtraConf
- err = json.Unmarshal([]byte(chartInfo.ExtraConfig), §ionExtraConfig)
- if err != nil {
- errMsg = "截面组合图配置异常"
- err = errors.New(errMsg)
- return
- }
- //替换里面的edbInfoId
- for i := 0; i < len(sectionExtraConfig.DateConfList); i++ {
- if newId, ok := newEdbInfoIdMap[sectionExtraConfig.DateConfList[i].EdbInfoId]; ok {
- sectionExtraConfig.DateConfList[i].EdbInfoId = newId
- }
- }
- configStr, e := json.Marshal(sectionExtraConfig)
- if e != nil {
- errMsg = "截面组合图配置异常"
- err = errors.New(errMsg + "json.Marshal 失败" + e.Error())
- return
- }
- chartInfo.ExtraConfig = string(configStr)
- }
- return
- }
|