|
@@ -1,6 +1,7 @@
|
|
|
package chart
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"hongze/hongze_yb/global"
|
|
|
chartEdbMappingModel "hongze/hongze_yb/models/tables/chart_edb_mapping"
|
|
@@ -11,6 +12,7 @@ import (
|
|
|
"hongze/hongze_yb/models/tables/my_chart_classify"
|
|
|
"hongze/hongze_yb/models/tables/yb_chart_daily_visit_log"
|
|
|
"hongze/hongze_yb/models/tables/yb_chart_visit_log"
|
|
|
+ "hongze/hongze_yb/services"
|
|
|
"hongze/hongze_yb/services/user"
|
|
|
"hongze/hongze_yb/utils"
|
|
|
"sort"
|
|
@@ -642,4 +644,127 @@ func SaveChartVisitLog(userInfo user.UserInfo, chartInfo *chartInfoModel.ChartIn
|
|
|
}
|
|
|
|
|
|
return
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+// RefreshChart 图表刷新
|
|
|
+func RefreshChart(chartInfoId int) (err error) {
|
|
|
+ var errMsg string
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ if global.CONFIG.Serve.RunMode == "release" {
|
|
|
+ go services.SendEmail(utils.APPNAME+"【"+global.CONFIG.Serve.RunMode+"】"+"失败提醒", "RefreshChart:"+errMsg, utils.EmailSendToUsers)
|
|
|
+ }
|
|
|
+ fmt.Println("RefreshChart Err:" + errMsg)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 获取需要刷新的指标
|
|
|
+ baseEdbInfoArr, calculateInfoArr, err := GetChartInfoRefreshData(chartInfoId)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取需要刷新的指标失败:Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ newBaseEdbInfoArr := make([]*edbInfoModel.EdbInfo, 0)
|
|
|
+ baseMap := make(map[int]*edbInfoModel.EdbInfo)
|
|
|
+ for _, bv := range baseEdbInfoArr {
|
|
|
+ if _, ok := baseMap[bv.EdbInfoId]; !ok {
|
|
|
+ newBaseEdbInfoArr = append(newBaseEdbInfoArr, bv)
|
|
|
+ }
|
|
|
+ baseMap[bv.EdbInfoId] = bv
|
|
|
+ }
|
|
|
+ newCalculateInfoArr := make([]*edbInfoModel.EdbInfo, 0)
|
|
|
+ calculateMap := make(map[int]*edbInfoModel.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)
|
|
|
+
|
|
|
+ // 刷新指标
|
|
|
+ var startDate string
|
|
|
+ for _, bv := range newBaseEdbInfoArr {
|
|
|
+ source := bv.Source
|
|
|
+ edbInfoId := bv.EdbInfoId
|
|
|
+ edbCode := bv.EdbCode
|
|
|
+ startDate = bv.StartDate.Format(utils.FormatDate)
|
|
|
+ frequency := bv.Frequency
|
|
|
+ if startDate == "0000-00-00" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ sTime := bv.EndDate
|
|
|
+
|
|
|
+ var limitDay int
|
|
|
+ startDate := ""
|
|
|
+ switch frequency {
|
|
|
+ case "日度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT
|
|
|
+ case "周度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 7
|
|
|
+ case "月度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 30
|
|
|
+ case "季度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 90
|
|
|
+ case "年度":
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT * 365
|
|
|
+ default:
|
|
|
+ limitDay = utils.DATA_START_REFRESH_LIMIT
|
|
|
+ }
|
|
|
+ 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 := edbDataModel.GetEdbInfoMaxAndMinInfo(source, edbCode)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if maxAndMinItem != nil {
|
|
|
+ err = edbDataModel.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 刷新计算指标
|
|
|
+ for _, v := range calculateArr {
|
|
|
+ edbInfo := calculateMap[v]
|
|
|
+ if edbInfo == nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ startDate = edbInfo.StartDate.Format(utils.FormatDate)
|
|
|
+ source := edbInfo.Source
|
|
|
+
|
|
|
+ if source == utils.DATA_SOURCE_CALCULATE {
|
|
|
+ sTime := edbInfo.EndDate
|
|
|
+ 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("刷新失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|