package data import ( "errors" "fmt" "hongze/hongze_chart_lib/models/data_manage" "hongze/hongze_chart_lib/utils" "sort" "time" ) // ChartInfoRefreshV1 图表刷新 func ChartInfoRefreshV1(chartInfoId int) (err error) { var errmsg string defer func() { if err != nil { go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ChartInfoRefresh:"+errmsg, utils.EmailSendToUsers) fmt.Println("ChartInfoRefresh Err:" + errmsg) } }() baseEdbInfoArr, calculateInfoArr, err := data_manage.GetChartInfoRefreshData(chartInfoId) if err != nil { errmsg = "获取需要刷新的指标失败:Err:" + err.Error() return } var startDate string newBaseEdbInfoArr := make([]*data_manage.EdbInfo, 0) baseMap := make(map[int]*data_manage.EdbInfo) for _, bv := range baseEdbInfoArr { if _, ok := baseMap[bv.EdbInfoId]; !ok { newBaseEdbInfoArr = append(newBaseEdbInfoArr, bv) } baseMap[bv.EdbInfoId] = bv } fmt.Println("calculateInfoArr:", len(calculateInfoArr)) newCalculateInfoArr := make([]*data_manage.EdbInfo, 0) calculateMap := make(map[int]*data_manage.EdbInfo) var calculateArr []int for _, bv := range calculateInfoArr { if _, ok := calculateMap[bv.EdbInfoId]; !ok { newCalculateInfoArr = append(newCalculateInfoArr, bv) calculateArr = append(calculateArr, bv.EdbInfoId) } calculateMap[bv.EdbInfoId] = bv } sort.Ints(calculateArr) for _, bv := range newBaseEdbInfoArr { source := bv.Source edbInfoId := bv.EdbInfoId edbCode := bv.EdbCode startDate = bv.StartDate frequency := bv.Frequency if bv.StartDate == "0000-00-00" { continue } sTime, err := time.Parse(utils.FormatDate, bv.EndDate) if err != nil { return err } var limitDay int startDate := "" switch frequency { case "日度": limitDay = utils.DATA_REFRESH case "周度": limitDay = utils.DATA_REFRESH * 7 case "月度": limitDay = utils.DATA_REFRESH * 30 case "季度": limitDay = utils.DATA_REFRESH * 90 case "年度": limitDay = utils.DATA_REFRESH * 365 default: limitDay = utils.DATA_REFRESH } startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate) fmt.Println("source:", source) respItem, err := RefreshEdbData(edbInfoId, source, edbCode, startDate) if err != nil { errmsg = errors.New("RefreshEdbData Err:" + err.Error()).Error() return err } if respItem.Ret != 200 { errmsg = errors.New(respItem.ErrMsg + ";EdbCode:" + edbCode).Error() return err } maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode) if err != nil { return err } if maxAndMinItem != nil { err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem) if err != nil { return err } } } //刷新相关计算指标 for _, v := range calculateArr { edbInfo := calculateMap[v] if edbInfo == nil { return err } startDate = edbInfo.StartDate source := edbInfo.Source if source == utils.DATA_SOURCE_CALCULATE { startDate = edbInfo.StartDate sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate) if err != nil { return err } startDate = sTime.Format(utils.FormatDate) } result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate) if err != nil { fmt.Println(v, "RefreshEdbCalculateData err", time.Now()) errmsg = "RefreshEdbCalculateData Err:" + err.Error() return err } if result.Ret != 200 { fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg) errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg) return fmt.Errorf("刷新失败" + errmsg) } fmt.Println("end calculateArr:", v, time.Now()) } return err }