소스 검색

添加图表信息

xyxie 10 달 전
부모
커밋
8c0a078f3c
4개의 변경된 파일277개의 추가작업 그리고 3개의 파일을 삭제
  1. 101 0
      controllers/data_manage/excel/balance_table.go
  2. 2 1
      models/data_manage/excel/request/balance_table.go
  3. 173 2
      services/data/excel/balance_table.go
  4. 1 0
      utils/constants.go

+ 101 - 0
controllers/data_manage/excel/balance_table.go

@@ -3,12 +3,14 @@ package excel
 import (
 	"encoding/json"
 	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/data_manage/excel/response"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/data/data_manage_permission"
 	excel2 "eta/eta_api/services/data/excel"
+	etaTrialService "eta/eta_api/services/eta_trial"
 	"eta/eta_api/utils"
 	"strconv"
 	"strings"
@@ -322,3 +324,102 @@ func (c *ExcelInfoController) GetWorker() {
 	br.Success = true
 	br.Msg = "操作成功"
 }
+
+// ChartInfoAdd
+// @Title 新增图表接口
+// @Description 新增图表接口
+// @Param	request	body data_manage.AddChartInfoReq true "type json string"
+// @Success 200 {object} data_manage.AddChartInfoResp
+// @router /excel_info/chart_info/add [post]
+func (this *ExcelInfoController) ChartInfoAdd() {
+	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_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
+	}
+
+	chartInfo, err, errMsg, isSendEmail := excel2.AddBalanceTableChart(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 = chartInfo.ChartInfoId
+	resp.UniqueCode = chartInfo.UniqueCode
+	resp.ChartType = req.ChartType
+
+	//新增操作日志
+	{
+		chartLog := new(data_manage.ChartInfoLog)
+		chartLog.ChartInfoId = chartInfo.ChartInfoId
+		chartLog.ChartName = req.ChartName
+		chartLog.ChartClassifyId = 0
+		chartLog.SysUserId = sysUser.AdminId
+		chartLog.SysUserRealName = sysUser.RealName
+		chartLog.UniqueCode = chartInfo.UniqueCode
+		chartLog.CreateTime = time.Now()
+		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Status = "新增图表"
+		chartLog.Method = this.Ctx.Input.URI()
+		go data_manage.AddChartInfoLog(chartLog)
+	}
+
+	// 试用平台更新用户累计新增图表数
+	adminItem, e := system.GetSysAdminById(sysUser.AdminId)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取系统用户数据失败,Err:" + err.Error()
+		return
+	}
+	if utils.BusinessCode == utils.BusinessCodeSandbox && adminItem.DepartmentName == "ETA试用客户" {
+		go func() {
+			var r etaTrialService.EtaTrialUserReq
+			r.Mobile = adminItem.Mobile
+			_, _ = etaTrialService.UpdateUserChartNum(r)
+		}()
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+	br.IsAddLog = true
+}

+ 2 - 1
models/data_manage/excel/request/balance_table.go

@@ -16,6 +16,7 @@ type AddBalanceTableChartItem struct {
 	LeadValue       int      `description:"领先值"`
 	LeadUnit        string   `description:"领先单位"`
 	FromTag         string   `description:"标签"`
+	ExcelChartEdbId int
 }
 
 type AddBalanceTableChartReq struct {
@@ -42,7 +43,7 @@ type AddBalanceTableChartReq struct {
 	SeasonExtraConfig data_manage.SeasonExtraItem `description:"季节性图表中的配置,json数据"`
 	StartYear         int                         `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
 	//ChartThemeId      int             `description:"图表应用主题ID"`
-	//SourcesFrom       string          `description:"图表来源"`
+	SourcesFrom string `description:"图表来源"`
 	//Instructions      string          `description:"图表说明"`
 	//MarkersLines      string          `description:"标识线"`
 	//MarkersAreas      string          `description:"标识区"`

+ 173 - 2
services/data/excel/balance_table.go

@@ -1,17 +1,22 @@
 package excel
 
 import (
+	"encoding/json"
 	"eta/eta_api/models/data_manage"
 	excelModel "eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/data_manage/excel/request"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services/data"
 	"eta/eta_api/utils"
 	"fmt"
+	"sort"
+	"strconv"
+	"strings"
 	"time"
 )
 
 // AddBalanceTableChart 添加平衡表图表
-func AddBalanceTableChart(req request.AddBalanceTableChartReq, sysUser *system.Admin) (err error, errMsg string) {
+func AddBalanceTableChart(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 {
@@ -69,7 +74,12 @@ func AddBalanceTableChart(req request.AddBalanceTableChartReq, sysUser *system.A
 		chartEdbList = append(chartEdbList, addItem)
 	}
 	// todo 处理图表
-	chartInfo := new(data_manage.ChartInfo)
+	chartInfo, err, errMsg, isSendEmail = addBalanceTableChart(req, sysUser.AdminId, sysUser.RealName)
+	if err != nil {
+		errMsg += "新增图表失败!" + err.Error()
+		err = fmt.Errorf("新增图表失败!")
+		return
+	}
 	obj := new(excelModel.ExcelChartEdb)
 	err = obj.AddChartEdbAndData(chartEdbList, chartInfo)
 	if err != nil {
@@ -80,3 +90,164 @@ func AddBalanceTableChart(req request.AddBalanceTableChartReq, sysUser *system.A
 
 	return
 }
+
+func addBalanceTableChart(req request.AddBalanceTableChartReq, sysUserId int, sysUserRealName string) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
+	isSendEmail = true // 默认错误的时候要发送邮件
+
+	req.ChartName = strings.Trim(req.ChartName, " ")
+	if req.ChartName == "" {
+		errMsg = "请填写图表名称!"
+		err = fmt.Errorf(errMsg)
+		isSendEmail = false
+		return
+	}
+	chartType := req.ChartType
+	extraConfig := req.ExtraConfig
+	// 季节性图表额外配置信息
+	var seasonExtraConfig string
+	// 关联指标
+	var edbInfoIdArr []int
+
+	if len(req.ChartEdbList) <= 0 {
+		errMsg = "请选择指标!"
+		err = fmt.Errorf(errMsg)
+		return
+	}
+	if chartType == 2 {
+		/*existCount, tmpErr := data_manage.GetEdbDataQuarterCount(edbInfoId)
+		if tmpErr != nil {
+			errMsg = "保存失败"
+			err = fmt.Errorf("判断季节性图表,指标数据是否存在失败,Err:" + tmpErr.Error())
+			return
+		}
+		if existCount <= 0 {
+			go data_manage.AddCalculateQuarter(edbInfoId, edbInfo.Source, edbInfo.EdbCode)
+		}*/
+
+		// 处理季节性图表横轴配置
+		{
+			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)
+			}
+		}
+	}
+
+	// 图表额外配置
+	extraConfig, err, errMsg = data.HandleExtraConfig(chartType, extraConfig)
+	if err != nil {
+		if errMsg == `` {
+			errMsg = "指标异常!"
+		}
+		err = fmt.Errorf("指标异常!Err:" + err.Error())
+		return
+	}
+
+	sort.Ints(edbInfoIdArr)
+	var edbInfoIdArrStr []string
+	for _, v := range edbInfoIdArr {
+		edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
+	}
+	edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
+
+	//判断图表是否存在
+	var condition string
+	var pars []interface{}
+
+	// 图表名称在不同图分类下不允许重复 需求调整时间:2022年11月07日09:47:07
+	//condition += " AND chart_classify_id=? "
+	//pars = append(pars, req.ChartClassifyId)
+
+	condition += " AND chart_name=? AND source = ? "
+	pars = append(pars, req.ChartName, utils.CHART_SOURCE_DEFAULT)
+
+	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 = new(data_manage.ChartInfo)
+	chartInfo.ChartName = req.ChartName
+	chartInfo.EdbInfoIds = edbInfoIdStr
+	//chartInfo.ChartClassifyId = req.ChartClassifyId
+	chartInfo.SysUserId = sysUserId
+	chartInfo.SysUserRealName = sysUserRealName
+	chartInfo.CreateTime = time.Now()
+	chartInfo.ModifyTime = time.Now()
+	chartInfo.IsSetName = 0
+	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+	chartInfo.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
+
+	// 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_EXCEL_BALANCE
+	//	chartInfo.ChartThemeId = req.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
+}

+ 1 - 0
utils/constants.go

@@ -276,6 +276,7 @@ const (
 	CHART_SOURCE_LINE_FEATURE_PERCENTILE         = 8  // 统计特征-百分位图表
 	CHART_SOURCE_LINE_FEATURE_FREQUENCY          = 9  // 统计特征-频率分布图表
 	CHART_SOURCE_CROSS_HEDGING                   = 10 // 跨品种分析图表
+	CHART_SOURCE_EXCEL_BALANCE                   = 11 // 平衡表图表
 )
 
 // 批量配置图表的位置来源