package data_manage import ( "encoding/json" "fmt" "hongze/hongze_ETA_mobile_api/controllers" "hongze/hongze_ETA_mobile_api/models/data_manage" "hongze/hongze_ETA_mobile_api/models/system" "hongze/hongze_ETA_mobile_api/services/data" "hongze/hongze_ETA_mobile_api/utils" "strconv" "strings" "time" ) // 图表管理 type ChartInfoController struct { controllers.BaseAuthController } func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCache bool, sysUser *system.Admin) (resp *data_manage.ChartInfoDetailFromUniqueCodeResp, isOk bool, msg, errMsg string) { resp = new(data_manage.ChartInfoDetailFromUniqueCodeResp) adminId := sysUser.AdminId //判断是否存在缓存,如果存在缓存,那么直接从缓存中获取 key := data.GetChartInfoDataKey(chartInfo.ChartInfoId) if utils.Re == nil && isCache { if utils.Re == nil && utils.Rc.IsExist(key) { if data, err1 := utils.Rc.RedisBytes(key); err1 == nil { err := json.Unmarshal(data, &resp) if err == nil && resp != nil { // 这里跟当前用户相关的信息重新查询写入resp, 不使用缓存中的 var myCond string var myPars []interface{} myCond += ` AND a.admin_id=? ` myPars = append(myPars, adminId) myCond += ` AND a.chart_info_id=? ` myPars = append(myPars, chartInfo.ChartInfoId) myList, err := data_manage.GetMyChartByCondition(myCond, myPars) if err != nil && err.Error() != utils.ErrNoRow() { msg = "获取失败" errMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error() return } resp.ChartInfo.IsAdd = false resp.ChartInfo.MyChartId = 0 resp.ChartInfo.MyChartClassifyId = "" if myList != nil && len(myList) > 0 { resp.ChartInfo.IsAdd = true resp.ChartInfo.MyChartId = myList[0].MyChartId resp.ChartInfo.MyChartClassifyId = myList[0].MyChartClassifyId } isOk = true fmt.Println("source redis") return } } } } chartInfoId := chartInfo.ChartInfoId dateType := chartInfo.DateType if dateType <= 0 { dateType = 3 } startDate := chartInfo.StartDate endDate := chartInfo.EndDate seasonStartDate := chartInfo.SeasonStartDate seasonEndDate := chartInfo.SeasonEndDate calendar := chartInfo.Calendar chartType := chartInfo.ChartType if calendar == "" { calendar = "公历" } fmt.Println("a dateType:", dateType) switch dateType { case 1: startDate = "2000-01-01" endDate = "" case 2: startDate = "2010-01-01" endDate = "" case 3: startDate = "2015-01-01" endDate = "" case 4: //startDate = strconv.Itoa(time.Now().Year()) + "-01-01" startDate = "2021-01-01" endDate = "" case 5: startDate = startDate + "-01" endDate = endDate + "-01" case 6: //startDate = startDate + "-01" endDate = "" case 7: startDate = "2018-01-01" endDate = "" case 8: startDate = "2019-01-01" endDate = "" case 9: startDate = "2020-01-01" endDate = "" endDate = "" case 11: startDate = "2022-01-01" endDate = "" } // 兼容日期错误 { if strings.Count(startDate, "-") == 1 { startDate = startDate + "-01" } if strings.Count(endDate, "-") == 1 { endDate = endDate + "-01" } } if chartType == 2 { if seasonStartDate != "" { startDate = seasonStartDate + "-01-01" } else { fivePre := time.Now().AddDate(-4, 0, 0).Year() startDate = strconv.Itoa(fivePre) + "-01-01" } if seasonEndDate != "" { endDate = seasonEndDate + "-12-31" } else { //endDate = time.Now().Format(utils.FormatDate) } } mappingList, err := data_manage.GetChartEdbMappingList(chartInfoId) if err != nil { msg = "获取失败" errMsg = "获取图表,指标信息失败,Err:" + err.Error() return } extraConfigStr := chartInfo.ExtraConfig //图表额外数据参数 var barConfig data_manage.BarChartInfoReq // 柱方图的一些配置 if chartInfo != nil && chartInfo.ChartType == 7 { if chartInfo.BarConfig == `` { msg = "柱方图未配置" errMsg = "柱方图未配置" return } err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig) if err != nil { msg = "柱方图配置异常" errMsg = "柱方图配置异常" return } extraConfigStr = chartInfo.BarConfig } // 获取图表中的指标数据 edbList, xEdbIdValue, yDataList, dataResp, err, errMsg := data.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, extraConfigStr) if err != nil { msg = "获取失败" if errMsg != `` { msg = errMsg } errMsg = "获取图表,指标信息失败,Err:" + err.Error() return } warnEdbList := make([]string, 0) for _, v := range edbList { if v.IsNullData { warnEdbList = append(warnEdbList, v.EdbName+"("+v.EdbCode+")") } } if len(warnEdbList) > 0 { chartInfo.WarnMsg = `图表引用指标异常,异常指标:` + strings.Join(warnEdbList, ",") } /* ChartClassify []*ChartClassifyView */ chartClassify, _ := data_manage.GetChartClassifyViewById(chartInfo.ChartClassifyId) if chartClassify != nil { chartClassifyParent, _ := data_manage.GetChartClassifyViewById(chartClassify.ParentId) chartInfo.ChartClassify = append(chartInfo.ChartClassify, chartClassifyParent) } chartInfo.ChartClassify = append(chartInfo.ChartClassify, chartClassify) resp.EdbInfoList = edbList //判断是否需要展示英文标识 chartInfo.IsEnChart = data.CheckIsEnChart(chartInfo.ChartNameEn, edbList, chartInfo.Source, chartInfo.ChartType) //判断是否加入我的图库 { var myChartCondition string var myChartPars []interface{} myChartCondition += ` AND a.admin_id=? ` myChartPars = append(myChartPars, adminId) myChartCondition += ` AND a.chart_info_id=? ` myChartPars = append(myChartPars, chartInfo.ChartInfoId) myChartList, err := data_manage.GetMyChartByCondition(myChartCondition, myChartPars) if err != nil && err.Error() != utils.ErrNoRow() { msg = "获取失败" errMsg = "获取我的图表信息失败,GetMyChartByCondition,Err:" + err.Error() return } if myChartList != nil && len(myChartList) > 0 { chartInfo.IsAdd = true chartInfo.MyChartId = myChartList[0].MyChartId chartInfo.MyChartClassifyId = myChartList[0].MyChartClassifyId } } //图表操作权限 chartInfo.IsEdit = data.CheckOpChartPermission(sysUser, chartInfo.SysUserId) resp.ChartInfo = chartInfo resp.XEdbIdValue = xEdbIdValue resp.YDataList = yDataList resp.Status = true resp.BarChartInfo = barConfig resp.DataResp = dataResp // 将数据加入缓存 if utils.Re == nil { data, _ := json.Marshal(resp) utils.Rc.Put(key, data, 2*time.Hour) } isOk = true return }