123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781 |
- package line_equation
- import (
- "encoding/json"
- "errors"
- "fmt"
- "github.com/shopspring/decimal"
- "hongze/hz_crm_api/models/data_manage"
- "hongze/hz_crm_api/models/data_manage/line_equation"
- "hongze/hz_crm_api/models/data_manage/line_equation/request"
- "hongze/hz_crm_api/models/system"
- "hongze/hz_crm_api/services/data"
- "hongze/hz_crm_api/utils"
- "math"
- "sort"
- "strconv"
- "strings"
- "time"
- )
- type LineEquationResp struct {
- AData LineEquationDataResp
- BData LineEquationDataResp
- R2Data LineEquationDataResp
- }
- type LineEquationDataResp struct {
- MaxData float64
- MinData float64
- LatestDate string `description:"真实数据的最后日期"`
- EdbInfoCategoryType int
- ChartColor string
- ChartStyle string
- PredictChartColor string
- ChartType int
- ChartWidth int
- EdbName string
- EdbNameEn string
- Unit string
- UnitEn string
- IsAxis int
- DataList []data_manage.EdbDataList
- }
- // GetChartEdbData 获取图表数据
- func GetChartEdbData(chartInfoId int, lineChartInfoConfig request.LineChartInfoReq, getAData, getBData, getR2Data bool) (edbList []*data_manage.ChartEdbInfoMapping, dataResp LineEquationResp, err error, errMsg string) {
- // 获取基本信息
- mappingList, startDate, endDate, err, errMsg := getConfigData(lineChartInfoConfig)
- if err != nil {
- return
- }
- xEdbInfoIdList := lineChartInfoConfig.XEdbInfoIdList
- yEdbInfoIdList := lineChartInfoConfig.YEdbInfoIdList
- aLineEquationDataResp := LineEquationDataResp{
- DataList: make([]data_manage.EdbDataList, 0),
- MaxData: 0,
- MinData: 0,
- ChartColor: "#00f",
- ChartStyle: `spline`,
- PredictChartColor: `#00f`,
- ChartType: 0,
- ChartWidth: 3,
- EdbName: `弹性系数`,
- EdbNameEn: `elastic coefficient`,
- IsAxis: 1,
- }
- bLineEquationDataResp := LineEquationDataResp{
- DataList: make([]data_manage.EdbDataList, 0),
- MaxData: 0,
- MinData: 0,
- ChartColor: "#00f",
- ChartStyle: `spline`,
- PredictChartColor: `#00f`,
- ChartType: 0,
- ChartWidth: 3,
- EdbName: `截距`,
- EdbNameEn: `intercept`,
- IsAxis: 1,
- }
- r2LineEquationDataResp := LineEquationDataResp{
- DataList: make([]data_manage.EdbDataList, 0),
- MaxData: 0,
- MinData: 0,
- ChartColor: "#00f",
- ChartStyle: `spline`,
- PredictChartColor: `#00f`,
- ChartType: 0,
- ChartWidth: 3,
- EdbName: `相关系数`,
- EdbNameEn: `coefficient of association`,
- IsAxis: 1,
- }
- edbList = make([]*data_manage.ChartEdbInfoMapping, 0)
- dataResp = LineEquationResp{
- AData: aLineEquationDataResp,
- BData: bLineEquationDataResp,
- R2Data: r2LineEquationDataResp,
- }
- var baseEdbInfo *data_manage.ChartEdbInfoMapping
- // 获取确定以哪个指标的日期作为基准日期
- {
- var xEdbInfo, yEdbInfo *data_manage.ChartEdbInfoMapping
- for _, v := range mappingList {
- if v.EdbInfoId == xEdbInfoIdList[0] {
- xEdbInfo = v
- }
- if v.EdbInfoId == yEdbInfoIdList[0] {
- yEdbInfo = v
- }
- }
- if xEdbInfo == nil {
- errMsg = `X轴第一个指标异常`
- err = errors.New(errMsg)
- return
- }
- if yEdbInfo == nil {
- errMsg = `Y轴第一个指标异常`
- err = errors.New(errMsg)
- return
- }
- // 时间截面规则:按照什么频率来取不同的截面的问题。原则是:按照X轴和Y轴所选择的第一个指标(X和Y分别有一个第一个指标),两个指标中,以低频的那个作为基准。如果X轴和Y轴是同频的,那以Y轴第一个指标的为准。
- frequencyIntMap := map[string]int{
- "日度": 1,
- "周度": 2,
- "旬度": 3,
- "月度": 4,
- "季度": 5,
- "年度": 6,
- }
- // 如果x是高频 或者 x与y是同频的,那么就是Y轴的第一个指标为主
- if frequencyIntMap[xEdbInfo.Frequency] <= frequencyIntMap[yEdbInfo.Frequency] {
- baseEdbInfo = yEdbInfo
- } else {
- // 否则是X轴的第一个指标是低频
- baseEdbInfo = xEdbInfo
- }
- }
- // 指标对应的所有数据
- chartType := 1 //1:普通图,2:季节性图
- calendar := "公历"
- edbDataListMap, edbList, err := data.GetEdbDataMapList(chartInfoId, chartType, calendar, startDate, endDate, mappingList)
- if err != nil {
- return
- }
- // 获取所有的日期
- dateList := make([]string, 0)
- for _, v := range edbDataListMap[baseEdbInfo.EdbInfoId] {
- dateList = append(dateList, v.DataTime)
- }
- // 数据整理
- // [日期][A指标id:值,B指标id:值]
- dateEdbMap, err := handleData(baseEdbInfo.EdbInfoId, edbDataListMap)
- if err != nil {
- return
- }
- lenX := len(xEdbInfoIdList)
- var isNotAFirst, isNotBFirst, isNotR2First bool
- for i, date := range dateList {
- coordinateData := make([]utils.Coordinate, 0)
- for k := 0; k < lenX; k++ {
- xVal, ok1 := dateEdbMap[date][xEdbInfoIdList[k]]
- yVal, ok2 := dateEdbMap[date][yEdbInfoIdList[k]]
- if !ok1 || !ok2 {
- continue
- }
- tmpCoordinate1 := utils.Coordinate{
- X: xVal,
- Y: yVal,
- }
- coordinateData = append(coordinateData, tmpCoordinate1)
- }
- dataTime, _ := time.ParseInLocation(utils.FormatDate, date, time.Local)
- timestamp := dataTime.UnixNano() / 1e6
- // 只有存在两个坐标点的时候,才能去计算线性方程和R平方
- if len(coordinateData) >= 2 {
- a, b := utils.GetLinearResult(coordinateData)
- if !math.IsNaN(a) && !math.IsNaN(b) && !math.IsInf(a, 0) && !math.IsInf(b, 0) {
- if getAData {
- a, _ = decimal.NewFromFloat(a).Round(4).Float64()
- dataResp.AData.DataList = append(dataResp.AData.DataList, data_manage.EdbDataList{
- EdbDataId: i,
- EdbInfoId: 0,
- DataTime: date,
- DataTimestamp: timestamp,
- Value: a,
- })
- if !isNotAFirst {
- dataResp.AData.MinData = a
- dataResp.AData.MaxData = a
- isNotAFirst = true
- }
- if dataResp.AData.MinData > a {
- dataResp.AData.MinData = a
- }
- if dataResp.AData.MaxData < a {
- dataResp.AData.MaxData = a
- }
- }
- if getBData {
- b, _ = decimal.NewFromFloat(b).Round(4).Float64()
- dataResp.BData.DataList = append(dataResp.BData.DataList, data_manage.EdbDataList{
- EdbDataId: i,
- EdbInfoId: 0,
- DataTime: date,
- DataTimestamp: timestamp,
- Value: b,
- })
- if !isNotBFirst {
- dataResp.BData.MinData = b
- dataResp.BData.MaxData = b
- isNotBFirst = true
- }
- if dataResp.BData.MinData > b {
- dataResp.BData.MinData = b
- }
- if dataResp.BData.MaxData < b {
- dataResp.BData.MaxData = b
- }
- }
- }
- // 计算R平方
- if getR2Data {
- tmpVal := utils.CalculationDecisive(coordinateData)
- if math.IsNaN(tmpVal) || math.IsInf(tmpVal, 0) {
- continue
- }
- tmpVal, _ = decimal.NewFromFloat(tmpVal).Round(4).Float64()
- dataResp.R2Data.DataList = append(dataResp.R2Data.DataList, data_manage.EdbDataList{
- EdbDataId: i,
- EdbInfoId: 0,
- DataTime: date,
- DataTimestamp: timestamp,
- Value: tmpVal,
- })
- if !isNotR2First {
- dataResp.R2Data.MinData = tmpVal
- dataResp.R2Data.MaxData = tmpVal
- isNotR2First = true
- }
- if dataResp.R2Data.MinData > tmpVal {
- dataResp.R2Data.MinData = tmpVal
- }
- if dataResp.R2Data.MaxData < tmpVal {
- dataResp.R2Data.MaxData = tmpVal
- }
- }
- }
- }
- dataResp.AData.LatestDate = baseEdbInfo.LatestDate
- dataResp.AData.EdbInfoCategoryType = baseEdbInfo.EdbInfoCategoryType
- dataResp.BData.LatestDate = baseEdbInfo.LatestDate
- dataResp.BData.EdbInfoCategoryType = baseEdbInfo.EdbInfoCategoryType
- dataResp.R2Data.LatestDate = baseEdbInfo.LatestDate
- dataResp.R2Data.EdbInfoCategoryType = baseEdbInfo.EdbInfoCategoryType
- return
- }
- // GetConfigData 获取配置数据
- func GetConfigData(lineChartInfoConfig request.LineChartInfoReq) (mappingList []*data_manage.ChartEdbInfoMapping, startDate, endDate string, err error, errMsg string) {
- return getConfigData(lineChartInfoConfig)
- }
- // getConfigData 获取配置数据
- func getConfigData(lineChartInfoConfig request.LineChartInfoReq) (mappingList []*data_manage.ChartEdbInfoMapping, startDate, endDate string, err error, errMsg string) {
- dateType := lineChartInfoConfig.DateType
- switch dateType {
- case 1:
- startDate = "2000-01-01"
- case 2:
- startDate = "2010-01-01"
- case 3:
- startDate = "2015-01-01"
- case 4:
- //startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
- startDate = "2021-01-01"
- case 5:
- startDate = lineChartInfoConfig.StartDate + "-01"
- endDate = lineChartInfoConfig.EndDate + "-01"
- case 6:
- startDate = lineChartInfoConfig.StartDate + "-01"
- case 7:
- startDate = "2018-01-01"
- case 8:
- startDate = "2019-01-01"
- case 9:
- startDate = "2020-01-01"
- case 11:
- startDate = "2022-01-01"
- }
- //指标数据
- edbInfoIdList := make([]int, 0)
- {
- edbInfoIdMap := make(map[int]int, 0)
- for _, edbInfoId := range lineChartInfoConfig.XEdbInfoIdList {
- edbInfoIdMap[edbInfoId] = edbInfoId
- }
- for _, edbInfoId := range lineChartInfoConfig.YEdbInfoIdList {
- edbInfoIdMap[edbInfoId] = edbInfoId
- }
- for _, edbInfoId := range edbInfoIdMap {
- edbInfoIdList = append(edbInfoIdList, edbInfoId)
- }
- }
- mappingList, err = data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIdList)
- if err != nil {
- errMsg = `获取失败`
- err = errors.New("获取图表,指标信息失败,Err:" + err.Error())
- return
- }
- return
- }
- // handleData 数据处理
- func handleData(baseEdbInfoId int, edbDataListMap map[int][]*data_manage.EdbDataList) (dateEdbMap map[string]map[int]float64, err error) {
- dateEdbMap = make(map[string]map[int]float64) // [日期][A指标id:值,B指标id:值]
- for edbInfoId, edbDataList := range edbDataListMap {
- if edbInfoId != baseEdbInfoId {
- // 用上期的数据补充当期的数据处理
- handleDataMap := make(map[string]float64)
- err = data_manage.HandleDataByPreviousData(edbDataList, handleDataMap)
- if err != nil {
- return
- }
- for date, val := range handleDataMap {
- item, ok := dateEdbMap[date]
- if ok {
- item[edbInfoId] = val
- } else {
- item = map[int]float64{
- edbInfoId: val,
- }
- }
- dateEdbMap[date] = item
- }
- } else {
- for _, edbData := range edbDataList {
- item, ok := dateEdbMap[edbData.DataTime]
- if ok {
- item[edbInfoId] = edbData.Value
- } else {
- item = map[int]float64{
- edbInfoId: edbData.Value,
- }
- }
- dateEdbMap[edbData.DataTime] = item
- }
- }
- }
- return
- }
- // BatchAddChartInfo 批量添加图表
- func BatchAddChartInfo(batchAddChartReq []request.AddChart, lineChartInfoConfig request.LineChartInfoReq, sysUser *system.Admin) (batchAddChartList []line_equation.BatchAddChart, err error, errMsg string, isSendEmail bool) {
- source := utils.CHART_SOURCE_LINE_EQUATION
- // 获取需要
- for k, v := range batchAddChartReq {
- v.ChartName = strings.Trim(v.ChartName, " ")
- batchAddChartReq[k] = v
- if v.ChartName == "" {
- errMsg = "请填写图表名称!"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- if v.ChartClassifyId <= 0 {
- errMsg = "请填写图表名称!"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- chartClassify, tmpErr := data_manage.GetChartClassifyById(v.ChartClassifyId)
- if tmpErr != nil {
- if tmpErr.Error() == utils.ErrNoRow() {
- errMsg = "分类不存在"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- errMsg = "获取分类信息失败"
- err = errors.New("获取分类信息失败,Err:" + tmpErr.Error())
- return
- }
- if chartClassify == nil {
- errMsg = "分类不存在"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- // 判断图表是否存在
- var condition string
- var pars []interface{}
- condition += " AND chart_name=? AND source = ? "
- pars = append(pars, v.ChartName, source)
- count, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
- if tmpErr != nil {
- errMsg = "判断图表名称是否存在失败"
- err = errors.New("判断图表名称是否存在失败,Err:" + tmpErr.Error())
- return
- }
- if count > 0 {
- errMsg = "图表已存在,请重新填写"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- }
- edbList, _, _, err, errMsg := getConfigData(lineChartInfoConfig)
- var edbInfoIdArr []int
- for _, v := range edbList {
- edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
- }
- disableVal := data.CheckIsDisableChart(edbInfoIdArr)
- sort.Ints(edbInfoIdArr)
- var edbInfoIdArrStr []string
- for _, v := range edbInfoIdArr {
- edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
- }
- edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
- // 批量配置
- lineChartInfoConfigByte, err := json.Marshal(lineChartInfoConfig)
- if err != nil {
- return
- }
- multipleGraphConfig := &data_manage.MultipleGraphConfig{
- Curve: string(lineChartInfoConfigByte),
- SysUserId: sysUser.AdminId,
- SysUserRealName: sysUser.RealName,
- ModifyTime: time.Now(),
- CreateTime: time.Now(),
- }
- // 多图
- batchAddChartList = make([]line_equation.BatchAddChart, 0)
- for _, v := range batchAddChartReq {
- tmpLineChartInfoConfig := lineChartInfoConfig
- tmpLineChartInfoConfig.Source = v.Source
- tmpLineChartInfoConfigByte, tmpErr := json.Marshal(tmpLineChartInfoConfig)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- chartInfo := &data_manage.ChartInfo{
- ChartInfoId: 0,
- ChartName: v.ChartName,
- //ChartNameEn: v.ChartName,
- ChartClassifyId: v.ChartClassifyId,
- SysUserId: sysUser.AdminId,
- SysUserRealName: sysUser.RealName,
- UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- DateType: lineChartInfoConfig.DateType,
- StartDate: lineChartInfoConfig.StartDate,
- EndDate: lineChartInfoConfig.EndDate,
- IsSetName: 0,
- EdbInfoIds: edbInfoIdStr,
- ChartType: 1,
- Calendar: "公历",
- SeasonStartDate: "",
- SeasonEndDate: "",
- ChartImage: v.ChartImage,
- Sort: 0,
- LeftMin: v.LeftMin,
- LeftMax: v.LeftMax,
- RightMin: "",
- RightMax: "",
- Disabled: disableVal,
- BarConfig: "",
- Source: source,
- ExtraConfig: string(tmpLineChartInfoConfigByte),
- }
- // 指标信息
- mapList := make([]*data_manage.ChartEdbMapping, 0)
- for _, edbInfo := range edbList {
- mapItem := new(data_manage.ChartEdbMapping)
- mapItem.EdbInfoId = edbInfo.EdbInfoId
- mapItem.CreateTime = time.Now()
- mapItem.ModifyTime = time.Now()
- timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
- mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + timestamp + "_" + strconv.Itoa(edbInfo.EdbInfoId))
- mapItem.IsOrder = true
- mapItem.IsAxis = 1
- mapItem.EdbInfoType = 1
- mapItem.Source = source
- mapList = append(mapList, mapItem)
- }
- // 批量的关系图
- multipleGraphConfigChartMapping := &data_manage.MultipleGraphConfigChartMapping{
- //Id: 0,
- //MultipleGraphConfigId: 0,
- //ChartInfoId: 0,
- Source: v.Source,
- ModifyTime: time.Now(),
- CreateTime: time.Now(),
- }
- batchAddChartList = append(batchAddChartList, line_equation.BatchAddChart{
- ChartInfo: chartInfo,
- EdbMappingList: mapList,
- MultipleGraphConfigChartMapping: multipleGraphConfigChartMapping,
- })
- }
- // 批量创建
- err = line_equation.CreateLineEquationChartAndEdb(multipleGraphConfig, batchAddChartList)
- // 更改es
- for _, v := range batchAddChartList {
- //添加es数据
- go data.EsAddOrEditChartInfo(v.ChartInfo.ChartInfoId)
- }
- return
- }
- // BatchSaveChartInfo 批量添加编辑图表
- func BatchSaveChartInfo(multipleGraphConfigId int, batchAddChartReq []request.AddChart, lineChartInfoConfig request.LineChartInfoReq, sysUser *system.Admin) (batchAddChartList []line_equation.BatchAddChart, err error, errMsg string, isSendEmail bool) {
- // 获取统一配置
- multipleGraphConfig, err := data_manage.GetMultipleGraphConfigById(multipleGraphConfigId)
- if err != nil {
- errMsg = `获取失败`
- err = errors.New(`获取配置失败,ERR:` + err.Error())
- return
- }
- // 获取已经关联的图表
- chartMappingList, err := data_manage.GetMultipleGraphConfigChartMappingListById(multipleGraphConfig.MultipleGraphConfigId)
- if err != nil {
- errMsg = `获取失败`
- err = errors.New(`获取关联图表配置失败,ERR:` + err.Error())
- return
- }
- // 已经存在关联的图表map
- existSourceChartMap := make(map[int]*data_manage.MultipleGraphConfigChartMapping)
- // 已经存在的图表map
- existChartInfoMap := make(map[int]*data_manage.ChartInfo)
- for _, v := range chartMappingList {
- existSourceChartMap[v.Source] = v
- chartInfo, tmpErr := data_manage.GetChartInfoById(v.ChartInfoId)
- if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
- err = tmpErr
- return
- }
- if chartInfo != nil {
- existChartInfoMap[v.Source] = chartInfo
- }
- }
- source := utils.CHART_SOURCE_LINE_EQUATION
- // 获取需要
- for k, v := range batchAddChartReq {
- v.ChartName = strings.Trim(v.ChartName, " ")
- batchAddChartReq[k] = v
- if v.ChartName == "" {
- errMsg = "请填写图表名称!"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- if v.ChartClassifyId <= 0 {
- errMsg = "请填写图表名称!"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- chartClassify, tmpErr := data_manage.GetChartClassifyById(v.ChartClassifyId)
- if tmpErr != nil {
- if tmpErr.Error() == utils.ErrNoRow() {
- errMsg = "分类不存在"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- errMsg = "获取分类信息失败"
- err = errors.New("获取分类信息失败,Err:" + tmpErr.Error())
- return
- }
- if chartClassify == nil {
- errMsg = "分类不存在"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- // 判断图表是否存在
- var condition string
- var pars []interface{}
- condition += " AND chart_name=? AND source = ? "
- pars = append(pars, v.ChartName, source)
- // 已经创建了图表的类型
- if sourceChart, ok := existChartInfoMap[v.Source]; ok {
- condition += " AND chart_info_id != ? "
- pars = append(pars, sourceChart.ChartInfoId)
- }
- count, tmpErr := data_manage.GetChartInfoCountByCondition(condition, pars)
- if tmpErr != nil {
- errMsg = "判断图表名称是否存在失败"
- err = errors.New("判断图表名称是否存在失败,Err:" + tmpErr.Error())
- return
- }
- if count > 0 {
- errMsg = "图表已存在,请重新填写"
- err = errors.New(errMsg)
- isSendEmail = false
- return
- }
- }
- edbList, _, _, err, errMsg := getConfigData(lineChartInfoConfig)
- var edbInfoIdArr []int
- for _, v := range edbList {
- edbInfoIdArr = append(edbInfoIdArr, v.EdbInfoId)
- }
- disableVal := data.CheckIsDisableChart(edbInfoIdArr)
- sort.Ints(edbInfoIdArr)
- var edbInfoIdArrStr []string
- for _, v := range edbInfoIdArr {
- edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(v))
- }
- edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
- // 批量配置
- lineChartInfoConfigByte, err := json.Marshal(lineChartInfoConfig)
- if err != nil {
- return
- }
- multipleGraphConfig.Curve = string(lineChartInfoConfigByte)
- multipleGraphConfig.ModifyTime = time.Now()
- updateMultipleGraphConfigCols := []string{"Curve", "ModifyTime"}
- updateChartCols := []string{"ChartName", "DateType", "StartDate", "EndDate", "EdbInfoIds", "LeftMin", "LeftMax", "Disabled", "ExtraConfig"}
- // 多图
- batchAddChartList = make([]line_equation.BatchAddChart, 0)
- for _, v := range batchAddChartReq {
- tmpLineChartInfoConfig := lineChartInfoConfig
- tmpLineChartInfoConfig.Source = v.Source
- tmpLineChartInfoConfigByte, tmpErr := json.Marshal(tmpLineChartInfoConfig)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- var multipleGraphConfigChartMapping *data_manage.MultipleGraphConfigChartMapping
- // 已经创建了图表的类型
- chartInfo, ok := existChartInfoMap[v.Source]
- if ok {
- chartInfo.ChartName = v.ChartName
- chartInfo.DateType = lineChartInfoConfig.DateType
- chartInfo.StartDate = lineChartInfoConfig.StartDate
- chartInfo.EndDate = lineChartInfoConfig.EndDate
- chartInfo.EdbInfoIds = edbInfoIdStr
- chartInfo.LeftMin = v.LeftMin
- chartInfo.LeftMax = v.LeftMax
- chartInfo.Disabled = disableVal
- chartInfo.ExtraConfig = string(tmpLineChartInfoConfigByte)
- //updateChartInfoList
- tmpMultipleGraphConfigChartMapping, ok2 := existSourceChartMap[v.Source]
- if !ok2 {
- err = errors.New("找不到对应的统一配置关系")
- return
- }
- multipleGraphConfigChartMapping = tmpMultipleGraphConfigChartMapping
- } else {
- chartInfo = &data_manage.ChartInfo{
- ChartInfoId: 0,
- ChartName: v.ChartName,
- //ChartNameEn: v.ChartName,
- ChartClassifyId: v.ChartClassifyId,
- SysUserId: sysUser.AdminId,
- SysUserRealName: sysUser.RealName,
- UniqueCode: utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + strconv.FormatInt(time.Now().UnixNano(), 10)),
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- DateType: lineChartInfoConfig.DateType,
- StartDate: lineChartInfoConfig.StartDate,
- EndDate: lineChartInfoConfig.EndDate,
- IsSetName: 0,
- EdbInfoIds: edbInfoIdStr,
- ChartType: 1,
- Calendar: "公历",
- SeasonStartDate: "",
- SeasonEndDate: "",
- ChartImage: "",
- Sort: 0,
- LeftMin: v.LeftMin,
- LeftMax: v.LeftMax,
- RightMin: "",
- RightMax: "",
- Disabled: disableVal,
- BarConfig: "",
- Source: source,
- ExtraConfig: string(tmpLineChartInfoConfigByte),
- }
- // 批量配置的关系图
- if tmpMultipleGraphConfigChartMapping, ok2 := existSourceChartMap[v.Source]; ok2 {
- multipleGraphConfigChartMapping = tmpMultipleGraphConfigChartMapping
- } else {
- multipleGraphConfigChartMapping = &data_manage.MultipleGraphConfigChartMapping{
- //Id: 0,
- //MultipleGraphConfigId: 0,
- //ChartInfoId: 0,
- Source: v.Source,
- ModifyTime: time.Now(),
- CreateTime: time.Now(),
- }
- }
- }
- // 指标信息
- mapList := make([]*data_manage.ChartEdbMapping, 0)
- for _, edbInfo := range edbList {
- mapItem := new(data_manage.ChartEdbMapping)
- mapItem.EdbInfoId = edbInfo.EdbInfoId
- mapItem.CreateTime = time.Now()
- mapItem.ModifyTime = time.Now()
- timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
- mapItem.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + fmt.Sprint(v.Source) + "_" + timestamp + "_" + strconv.Itoa(edbInfo.EdbInfoId))
- mapItem.IsOrder = true
- mapItem.IsAxis = 1
- mapItem.EdbInfoType = 1
- mapItem.Source = source
- mapList = append(mapList, mapItem)
- }
- batchAddChartList = append(batchAddChartList, line_equation.BatchAddChart{
- ChartInfo: chartInfo,
- EdbMappingList: mapList,
- MultipleGraphConfigChartMapping: multipleGraphConfigChartMapping,
- })
- }
- // 批量创建
- err = line_equation.CreateAndEditLineEquationChartAndEdb(multipleGraphConfig, batchAddChartList, updateMultipleGraphConfigCols, updateChartCols)
- // 更改es
- for _, v := range batchAddChartList {
- //添加es数据
- go data.EsAddOrEditChartInfo(v.ChartInfo.ChartInfoId)
- }
- return
- }
|