123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- 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"
- "strconv"
- "strings"
- "time"
- )
- // AddBalanceTableChart 添加平衡表图表
- 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 {
- 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
- }
- chartEdbList := make([]*excelModel.AddChartEdbAndDataItem, 0)
- for _, chartEdb := range req.ChartEdbInfoList {
- excelEdb := new(excelModel.ExcelChartEdb)
- excelEdb.EdbName = chartEdb.EdbName
- randStr := utils.GetRandDigit(4)
- excelEdb.EdbCode = `T` + time.Now().Format("060102150405") + "_" + randStr
- excelEdb.ExcelInfoId = excelInfo.ExcelInfoId
- excelEdb.DateSequence = chartEdb.DateSequenceStr
- excelEdb.DataSequence = chartEdb.DataSequenceStr
- excelEdb.SysUserId = sysUser.AdminId
- excelEdb.SysUserRealName = sysUser.RealName
- 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
- var dateList []string
- var dataList []float64
- if excelInfo.BalanceType == 1 {
- // 如果是静态表,则直接使用前端传输的数据落到数据库里
- dateList, dataList, err, errMsg = 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)
- }
- // todo 处理图表
- chartInfo, err, errMsg, isSendEmail = addBalanceTableChart(req, sysUser.AdminId, sysUser.RealName)
- if err != nil {
- errMsg = "新增图表失败!"
- err = fmt.Errorf("新增图表失败!%s, %s", errMsg, err.Error())
- return
- }
- obj := new(excelModel.ExcelChartEdb)
- err = obj.AddChartEdbAndData(chartEdbList, chartInfo)
- if err != nil {
- errMsg = "新增图表失败!"
- err = fmt.Errorf("新增图表数据失败!%s", err.Error())
- return
- }
- 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
- if len(req.ChartEdbInfoList) <= 0 {
- errMsg = "请选择指标!"
- err = fmt.Errorf(errMsg)
- return
- }
- 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)
- }
- }
- }
- // 图表额外配置
- extraConfig, err, errMsg = data.HandleExtraConfig(chartType, extraConfig)
- if err != nil {
- if errMsg == `` {
- errMsg = "指标异常!"
- }
- err = fmt.Errorf("指标异常!Err:" + err.Error())
- return
- }
- //判断图表是否存在
- var condition string
- var pars []interface{}
- // 图表名称在不同图分类下不允许重复 需求调整时间: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 = 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_BALANCE_EXCEL
- // 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
- }
|