Browse Source

Merge branch 'feature/eta1.8.5_excel_balance' into debug

xyxie 10 months ago
parent
commit
ef655edd24

+ 92 - 3
controllers/data_manage/excel/balance_table.go

@@ -326,13 +326,13 @@ func (c *ExcelInfoController) GetWorker() {
 	br.Msg = "操作成功"
 }
 
-// ChartInfoAdd
+// BalanceChartInfoAdd
 // @Title 新增图表接口
 // @Description 新增图表接口
 // @Param	request	body data_manage.AddChartInfoReq true "type json string"
 // @Success 200 {object} data_manage.AddChartInfoResp
 // @router /excel_info/balance/chart_add [post]
-func (this *ExcelInfoController) ChartInfoAdd() {
+func (this *ExcelInfoController) BalanceChartInfoAdd() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -347,7 +347,7 @@ func (this *ExcelInfoController) ChartInfoAdd() {
 		return
 	}
 	deleteCache := true
-	cacheKey := "CACHE_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
+	cacheKey := "CACHE_EXCEL_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
 	defer func() {
 		if deleteCache {
 			utils.Rc.Delete(cacheKey)
@@ -425,6 +425,95 @@ func (this *ExcelInfoController) ChartInfoAdd() {
 	br.IsAddLog = true
 }
 
+// BalanceChartInfoEdit
+// @Title 编辑图表接口
+// @Description 新增图表接口
+// @Param	request	body data_manage.AddChartInfoReq true "type json string"
+// @Success 200 {object} data_manage.AddChartInfoResp
+// @router /excel_info/balance/chart_edit [post]
+func (this *ExcelInfoController) BalanceChartInfoEdit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	deleteCache := true
+	cacheKey := "CACHE_EXCEL_CHART_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
+	defer func() {
+		if deleteCache {
+			utils.Rc.Delete(cacheKey)
+		}
+	}()
+	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
+		deleteCache = false
+		br.Msg = "系统处理中,请稍后重试!"
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		return
+	}
+	var req request.AddBalanceTableChartReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.ChartName = strings.Trim(req.ChartName, " ")
+	if req.ChartName == "" {
+		br.Msg = "请填写图表名称!"
+		return
+	}
+	if req.ChartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		return
+	}
+
+	chartItem, err, errMsg, isSendEmail := data.EditBalanceExcelChart(req, sysUser)
+	if err != nil {
+		br.Msg = "保存失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
+		br.ErrMsg = err.Error()
+		br.IsSendEmail = isSendEmail
+		return
+	}
+
+	resp := new(data_manage.AddChartInfoResp)
+	resp.ChartInfoId = chartItem.ChartInfoId
+	resp.UniqueCode = chartItem.UniqueCode
+	resp.ChartType = req.ChartType
+
+	//新增操作日志
+	{
+		chartLog := new(data_manage.ChartInfoLog)
+		chartLog.ChartName = chartItem.ChartName
+		chartLog.ChartInfoId = req.ChartInfoId
+		chartLog.ChartClassifyId = chartItem.ChartClassifyId
+		chartLog.SysUserId = sysUser.AdminId
+		chartLog.SysUserRealName = sysUser.RealName
+		chartLog.UniqueCode = chartItem.UniqueCode
+		chartLog.CreateTime = time.Now()
+		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Status = "编辑图表"
+		chartLog.Method = this.Ctx.Input.URL()
+		go data_manage.AddChartInfoLog(chartLog)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+	br.IsAddLog = true
+}
+
 // GetBalanceChartList
 // @Title 获取平衡表表关联的图表
 // @Description 获取平衡表表关联的图表

+ 15 - 0
models/data_manage/chart_theme/chart_theme_type.go

@@ -88,3 +88,18 @@ func GetChartThemeTypeByChartTypeAndSource(chartType, source int) (item *ChartTh
 
 	return
 }
+
+// GetChartThemeTypeByChartType
+// @Description: 通过图表类型获取类型
+// @author: Roc
+// @datetime 2023-12-14 09:53:58
+// @param chartThemeTypeId int
+// @return item *ChartThemeType
+// @return err error
+func GetChartThemeTypeByChartType(chartType int) (item *ChartThemeType, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_theme_type where chart_type = ?`
+	err = o.Raw(sql, chartType).QueryRow(&item)
+
+	return
+}

+ 68 - 12
models/data_manage/excel/excel_chart_edb.go

@@ -5,6 +5,8 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -62,7 +64,7 @@ type AddChartEdbAndDataItem struct {
 }
 
 // 同时添加指标和指标数据
-func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *data_manage.ChartInfo) (err error) {
+func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *data_manage.ChartInfo, deleteEdbIds []int) (err error) {
 	o, err := orm.NewOrmUsingDB("data").Begin()
 	if err != nil {
 		return
@@ -75,35 +77,82 @@ func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chart
 		}
 	}()
 
+	// 先删除原先的绑定的指标
+	if len(deleteEdbIds) > 0 && chartInfo.ChartInfoId > 0 {
+		sql := `DELETE FROM excel_chart_edb WHERE excel_chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
+		_, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除原先的指标失败:%v", err)
+			return
+		}
+	}
 	// 图表指标信息入库
 	updateIds := make([]int, 0)
+	var edbInfoIdArrStr []string
 	for _, item := range list {
 		err = addChartEdbAndData(o, item.ChartEdb, item.DateList, item.ValList)
 		if err != nil {
 			return
 		}
 		updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
+		edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(item.ChartEdb.ExcelChartEdbId))
 	}
 
 	//新增图表
-	chartInfoId, err := o.Insert(chartInfo)
-	if err != nil {
-		return
+	chartInfoId := chartInfo.ChartInfoId
+	if chartInfo.ChartInfoId <= 0 {
+		lastId, e := o.Insert(chartInfo)
+		if e != nil {
+			err = fmt.Errorf("新增图表失败,AddChartEdbAndData: %v", e)
+			return
+		}
+		chartInfoId = int(lastId)
+	} else {
+		_, err = o.Update(chartInfo)
+		if err != nil {
+			err = fmt.Errorf("更新图表失败,AddChartEdbAndData: %v", e)
+			return
+		}
 	}
 
 	//更新图表id
 	sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `)`
 	_, err = o.Raw(sql, chartInfoId, updateIds).Exec()
+
+	if len(edbInfoIdArrStr) > 0 {
+		edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
+		//更新图表关联的指标id
+		sql = `update chart_info set edb_info_ids = ? where chart_info_id = ?`
+		_, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
+	}
 	return
 }
 
 func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
 	// 图表指标信息入库
-	lastId, err := o.Insert(chartEdb)
-	if err != nil {
-		return
+	excelChartEdbId := chartEdb.ExcelChartEdbId
+	if chartEdb.ExcelChartEdbId <= 0 {
+		lastId, e := o.Insert(chartEdb)
+		if e != nil {
+			err = fmt.Errorf("新增指标失败,addChartEdbAndData: %v", e)
+			return
+		}
+		excelChartEdbId = int(lastId)
+	} else {
+		_, e := o.Update(chartEdb)
+		if e != nil {
+			err = fmt.Errorf("更新指标失败,addChartEdbAndData: %v", e)
+			return
+		}
+		//如果有数据则删除所有的数据
+		sql := `delete from excel_chart_data where excel_chart_edb_id = ?`
+		_, err = o.Raw(sql, excelChartEdbId).Exec()
+		if err != nil {
+			return
+		}
 	}
-	chartEdb.ExcelChartEdbId = int(lastId)
+
+	chartEdb.ExcelChartEdbId = excelChartEdbId
 
 	// 图表指标数据入库
 	addList := make([]*ExcelChartData, 0)
@@ -157,12 +206,19 @@ func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEd
 	return
 }
 
-func GetExcelChartInfoByExcelInfoId(excelInfoId int, charInfoIds []int) (list []*ExcelChartEdb, err error) {
+func GetExcelChartEdbById(id int) (item *ExcelChartEdb, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM excel_chart_edb WHERE excel_chart_edb_id=? `
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func GetExcelChartEdbMappingByChartInfoId(chartInfoId int) (list []*ExcelChartEdb, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT *
-             FROM chart_info 
-			 WHERE source=11 and chart_info_id in (utils.) 
+             FROM excel_chart_edb 
+			 WHERE chart_info_id=? 
              ORDER BY excel_chart_edb_id ASC `
-	_, err = o.Raw(sql, excelInfoId).QueryRows(&list)
+	_, err = o.Raw(sql, chartInfoId).QueryRows(&list)
 	return
 }

+ 11 - 13
models/data_manage/excel/request/balance_table.go

@@ -3,19 +3,17 @@ package request
 import "eta/eta_api/models/data_manage"
 
 type AddBalanceTableChartEdbItem struct {
-	DateSequenceStr string   `description:"日期序列"`
-	DateSequenceVal []string `description:"日期序列的值列表"`
-	DataSequenceStr string   `description:"数据序列"`
-	DataSequenceVal []string `description:"数据序列的值列表"`
-	EdbName         string   `description:"指标名称"`
-	MaxData         float64  `description:"上限"`
-	MinData         float64  `description:"下限"`
-	IsOrder         bool     `description:"true:正序,false:逆序"`
-	IsAxis          int      `description:"true:左轴,false:右轴"`
-	EdbInfoType     int      `description:"true:标准指标,false:领先指标"`
-	LeadValue       int      `description:"领先值"`
-	LeadUnit        string   `description:"领先单位"`
-	FromTag         string   `description:"标签"`
+	DateSequenceStr string  `description:"日期序列"`
+	DataSequenceStr string  `description:"数据序列"`
+	EdbName         string  `description:"指标名称"`
+	MaxData         float64 `description:"上限"`
+	MinData         float64 `description:"下限"`
+	IsOrder         bool    `description:"true:正序,false:逆序"`
+	IsAxis          int     `description:"true:左轴,false:右轴"`
+	EdbInfoType     int     `description:"true:标准指标,false:领先指标"`
+	LeadValue       int     `description:"领先值"`
+	LeadUnit        string  `description:"领先单位"`
+	FromTag         string  `description:"标签"`
 	ExcelChartEdbId int
 
 	/*	ChartStyle        string  `description:"图表类型"`

+ 10 - 1
routers/commentsRouter.go

@@ -819,13 +819,22 @@ func init() {
 
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
         beego.ControllerComments{
-            Method: "ChartInfoAdd",
+            Method: "BalanceChartInfoAdd",
             Router: `/excel_info/balance/chart_add`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
+        beego.ControllerComments{
+            Method: "BalanceChartInfoEdit",
+            Router: `/excel_info/balance/chart_edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/excel:ExcelInfoController"],
         beego.ControllerComments{
             Method: "GetBalanceChartList",

+ 279 - 4
services/data/chart_info_excel_balance.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"errors"
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/chart_theme"
 	excelModel "eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/system"
@@ -83,7 +84,7 @@ func AddBalanceExcelChart(req request.AddBalanceTableChartReq, sysUser *system.A
 		return
 	}
 	obj := new(excelModel.ExcelChartEdb)
-	err = obj.AddChartEdbAndData(chartEdbList, chartInfo)
+	err = obj.AddChartEdbAndData(chartEdbList, chartInfo, []int{})
 	if err != nil {
 		errMsg = "新增图表失败!"
 		err = fmt.Errorf("新增图表数据失败!%s", err.Error())
@@ -105,6 +106,14 @@ func addBalanceExcelChart(req request.AddBalanceTableChartReq, sysUserId int, sy
 	chartType := req.ChartType
 	extraConfig := req.ExtraConfig
 	// todo 查找默认主题设置
+	// 查找主题类型id
+	chartThemeType, err := chart_theme.GetChartThemeTypeByChartType(chartType)
+	if err != nil {
+		errMsg = "查找主题类型失败!"
+		err = fmt.Errorf("%s, %s", errMsg, err.Error())
+		return
+	}
+	chartThemeId := chartThemeType.DefaultChartThemeId
 	// 季节性图表额外配置信息
 	var seasonExtraConfig string
 
@@ -167,8 +176,6 @@ func addBalanceExcelChart(req request.AddBalanceTableChartReq, sysUserId int, sy
 		isSendEmail = false
 		return
 	}
-	// todo 判断是否是禁用的图表
-	//	disableVal := data.CheckIsDisableChart(edbInfoIdArr)
 
 	chartInfo = new(data_manage.ChartInfo)
 	chartInfo.ChartName = req.ChartName
@@ -213,7 +220,275 @@ func addBalanceExcelChart(req request.AddBalanceTableChartReq, sysUserId int, sy
 	chartInfo.SeasonExtraConfig = seasonExtraConfig
 	//chartInfo.StartYear = req.StartYear
 	chartInfo.Source = utils.CHART_SOURCE_BALANCE_EXCEL
-	//	chartInfo.ChartThemeId = req.ChartThemeId
+	chartInfo.ChartThemeId = chartThemeId
+	chartInfo.SourcesFrom = req.SourcesFrom
+	/*	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 = `保存失败`
+		err = fmt.Errorf("保存失败,Err:" + err.Error())
+		return
+	}
+	chartInfo.ChartInfoId = int(newId)*/
+
+	//添加es数据
+	//go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+
+	return
+}
+
+// EditBalanceExcelChart 添加平衡表图表
+func EditBalanceExcelChart(req request.AddBalanceTableChartReq, sysUser *system.Admin) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
+	// 获取表格信息
+	excelInfo, err := excelModel.GetExcelInfoById(req.ExcelInfoId)
+	if err != nil {
+		errMsg = "找不到该EXCEL"
+		err = fmt.Errorf("找不到该EXCEL!%s", err.Error())
+		return
+	}
+
+	if excelInfo.Source != utils.BALANCE_TABLE {
+		errMsg = "EXCEL类型错误!"
+		err = fmt.Errorf("EXCEL类型错误!")
+		return
+	}
+	if len(req.ChartEdbInfoList) == 0 {
+		errMsg = "图表数据不能为空!"
+		err = fmt.Errorf("图表数据不能为空!%s", err.Error())
+		return
+	}
+
+	//查询已有的mapping
+	mapping, err := excelModel.GetExcelChartEdbMappingByChartInfoId(req.ChartInfoId)
+	if err != nil {
+		errMsg = "查询图表mapping失败!"
+		err = fmt.Errorf("查询图表mapping失败!%s", err.Error())
+		return
+	}
+	deleteMap := make(map[int]int)
+	for _, v := range mapping {
+		deleteMap[v.ExcelChartEdbId] = v.ExcelChartEdbId
+	}
+
+	// 查询edbIds
+	chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
+	for _, chartEdb := range req.ChartEdbInfoList {
+		if _, ok := deleteMap[chartEdb.ExcelChartEdbId]; ok {
+			delete(deleteMap, chartEdb.ExcelChartEdbId)
+		}
+		excelChartEdbId := chartEdb.ExcelChartEdbId
+		excelEdb, tmpErr := excelModel.GetExcelChartEdbById(excelChartEdbId)
+		if tmpErr != nil {
+			if tmpErr.Error() == utils.ErrNoRow() {
+				errMsg = "指标不存在!"
+				err = errors.New("指标不存在,edbInfoId:" + strconv.Itoa(excelChartEdbId))
+				return
+			} else {
+				errMsg = "获取指标信息失败!"
+				err = errors.New("获取图表的指标信息失败,Err:" + tmpErr.Error())
+				return
+			}
+		}
+
+		if excelEdb == nil {
+			errMsg = "指标已被删除,请重新选择!"
+			err = errors.New("指标不存在,ChartInfoId:" + strconv.Itoa(req.ChartInfoId))
+			return
+		} else {
+			if excelEdb.ExcelChartEdbId <= 0 {
+				errMsg = "指标已被删除,请重新选择!"
+				err = errors.New("指标不存在,ChartInfoId:" + strconv.Itoa(req.ChartInfoId))
+				return
+			}
+		}
+		excelEdb.EdbName = chartEdb.EdbName
+		excelEdb.DateSequence = chartEdb.DateSequenceStr
+		excelEdb.DataSequence = chartEdb.DataSequenceStr
+		excelEdb.MaxData = chartEdb.MaxData
+		excelEdb.MinData = chartEdb.MinData
+		excelEdb.IsOrder = chartEdb.IsOrder
+		excelEdb.IsAxis = chartEdb.IsAxis
+		excelEdb.FromTag = chartEdb.FromTag
+		excelEdb.EdbInfoType = chartEdb.EdbInfoType
+		excelEdb.LeadValue = chartEdb.LeadValue
+		excelEdb.LeadUnit = chartEdb.LeadUnit
+		excelEdb.ModifyTime = time.Now()
+		var dateList []string
+		var dataList []float64
+		if excelInfo.BalanceType == 1 {
+			// 如果是静态表,则直接使用前端传输的数据落到数据库里
+			/*dateList, dataList, err, errMsg = utils.HandleEdbSequenceVal(chartEdb.DateSequenceVal, chartEdb.DataSequenceVal)
+			if err != nil {
+				errMsg = "时间序列或数据序列异常!"
+				err = fmt.Errorf("时间序列或数据序列异常!%s", err.Error())
+				return
+			}*/
+		}
+
+		// 处理日期列表和值列表
+		addItem := &excelModel.AddChartEdbAndDataItem{
+			ChartEdb: excelEdb,
+			DateList: dateList,
+			ValList:  dataList,
+		}
+		chartEdbList = append(chartEdbList, addItem)
+	}
+	chartInfo, err, errMsg, isSendEmail = editBalanceExcelChart(req)
+	if err != nil {
+		errMsg = "新增图表失败!"
+		err = fmt.Errorf("新增图表失败!%s, %s", errMsg, err.Error())
+		return
+	}
+	obj := new(excelModel.ExcelChartEdb)
+	//删除原先多余的指标
+	deleteEdbIds := make([]int, 0)
+	for k, _ := range deleteMap {
+		deleteEdbIds = append(deleteEdbIds, k)
+	}
+	err = obj.AddChartEdbAndData(chartEdbList, chartInfo, deleteEdbIds)
+	if err != nil {
+		errMsg = "新增图表失败!"
+		err = fmt.Errorf("新增图表数据失败!%s", err.Error())
+		return
+	}
+	return
+}
+
+func editBalanceExcelChart(req request.AddBalanceTableChartReq) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true // 默认错误的时候要发送邮件
+	chartType := req.ChartType
+	extraConfig := req.ExtraConfig
+
+	chartInfo, err = data_manage.GetChartInfoById(req.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
+	}
+	// todo 查找默认主题设置
+	// todo 查找默认主题设置
+	// 查找主题类型id
+	chartThemeType, err := chart_theme.GetChartThemeTypeByChartType(chartType)
+	if err != nil {
+		errMsg = "查找主题类型失败!"
+		err = fmt.Errorf("%s, %s", errMsg, err.Error())
+		return
+	}
+	chartThemeId := chartThemeType.DefaultChartThemeId
+	// 季节性图表额外配置信息
+	var seasonExtraConfig string
+
+	if chartType == 2 {
+		// 处理季节性图表横轴配置
+		{
+			if req.SeasonExtraConfig.XEndDate != "" {
+				if req.SeasonExtraConfig.XStartDate > req.SeasonExtraConfig.XEndDate && req.SeasonExtraConfig.JumpYear != 1 {
+					errMsg = "季节性图表配置信息异常:横坐标日期配置错误"
+					err = fmt.Errorf("季节性图表配置信息异常: 横坐标日期配置错误")
+					return
+				}
+				seasonExtra, tErr := json.Marshal(req.SeasonExtraConfig)
+				if tErr != nil {
+					errMsg = "季节性图表配置信息异常"
+					err = fmt.Errorf("季节性图表配置信息异常,Err:" + tErr.Error())
+					return
+				}
+
+				seasonExtraConfig = string(seasonExtra)
+			}
+		}
+	}
+
+	/*var extraConfigEdbInfoIdArr []int
+	extraConfigEdbInfoIdArr, err, errMsg = CheckChartExtraConfig(req.ChartType, req.ExtraConfig)
+	if err != nil {
+		err = errors.New("添加失败:" + err.Error())
+		return
+	}*/
+
+	// 图表额外配置
+	extraConfig, err, errMsg = HandleExtraConfig(chartType, extraConfig)
+	if err != nil {
+		if errMsg == `` {
+			errMsg = "指标异常!"
+		}
+		err = fmt.Errorf("指标异常!Err:" + err.Error())
+		return
+	}
+
+	//判断图表是否存在
+	var condition string
+	var pars []interface{}
+	condition += " AND chart_info_id<>? "
+	pars = append(pars, req.ChartInfoId)
+	// 图表名称在不同图分类下不允许重复 需求调整时间:2022年11月07日09:47:07
+	condition += " AND chart_classify_id=0 "
+
+	condition += " AND chart_name=? AND source = ? "
+	pars = append(pars, req.ChartName, utils.CHART_SOURCE_BALANCE_EXCEL)
+
+	count, err := data_manage.GetChartInfoCountByCondition(condition, pars)
+	if err != nil {
+		errMsg = "判断图表名称是否存在失败"
+		err = fmt.Errorf("判断图表名称是否存在失败,Err:" + err.Error())
+		return
+	}
+
+	if count > 0 {
+		errMsg = "图表已存在,请重新填写"
+		err = fmt.Errorf("判断图表名称是否存在失败")
+		isSendEmail = false
+		return
+	}
+	// todo 判断是否是禁用的图表
+	//	disableVal := data.CheckIsDisableChart(edbInfoIdArr)
+	chartInfo.ChartName = req.ChartName
+	//chartInfo.EdbInfoIds = edbInfoIdStr
+	//chartInfo.ChartClassifyId = req.ChartClassifyId
+	chartInfo.ModifyTime = time.Now()
+	chartInfo.IsSetName = 0
+	// todo 判断是否需要重新计算用户的start_date
+	chartInfo.DateType = 3
+
+	if chartType == 0 {
+		chartType = 1
+	}
+	chartInfo.ChartType = chartType
+
+	calendar := req.Calendar
+	if calendar == "" {
+		calendar = "公历"
+	}
+
+	chartInfo.Calendar = calendar
+	/*	chartInfo.StartDate = req.StartDate
+		chartInfo.EndDate = req.EndDate
+		chartInfo.SeasonStartDate = req.StartDate
+		chartInfo.SeasonEndDate = req.EndDate*/
+	chartInfo.LeftMin = req.LeftMin
+	chartInfo.LeftMax = req.LeftMax
+	chartInfo.RightMin = req.RightMin
+	chartInfo.RightMax = req.RightMax
+	chartInfo.Right2Min = req.Right2Min
+	chartInfo.Right2Max = req.Right2Max
+	chartInfo.MinMaxSave = req.MinMaxSave
+	//chartInfo.Disabled = disableVal
+	//chartInfo.BarConfig = barChartConf
+	chartInfo.ExtraConfig = extraConfig
+	chartInfo.SeasonExtraConfig = seasonExtraConfig
+	//chartInfo.StartYear = req.StartYear
+	chartInfo.Source = utils.CHART_SOURCE_BALANCE_EXCEL
+	chartInfo.ChartThemeId = chartThemeId
 	chartInfo.SourcesFrom = req.SourcesFrom
 	/*	chartInfo.Instructions = req.Instructions
 		chartInfo.MarkersLines = req.MarkersLines