package controllers import ( "encoding/json" "eta/eta_index_lib/logic" "eta/eta_index_lib/models" "eta/eta_index_lib/utils" "fmt" "strconv" "time" ) type SciHqController struct { BaseAuthController } // Add // @Title 新增卓创红期指标接口 // @Description 新增卓创红期指标接口 // @Success 200 {object} models.AddEdbInfoReq // @router /add [post] func (this *SciHqController) Add() { br := new(models.BaseResponse).Init() var cacheKey string defer func() { utils.Rc.Delete(cacheKey) this.Data["json"] = br this.ServeJSON() }() var req models.AddEdbInfoReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.EdbCode == "" { br.Msg = "请输入指标编码!" br.ErrMsg = "请输入指标编码,指标编码为空" return } cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(req.Source) + "_" + req.EdbCode if !utils.Rc.IsExist(cacheKey) { utils.Rc.SetNX(cacheKey, 1, 1*time.Minute) err = models.AddEdbDataFromSciHq(req.EdbCode) if err != nil { br.Msg = "获取指标信息失败!" br.ErrMsg = "获取指标信息失败 AddEdbDataFromSci,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" } else { br.Ret = 501 br.Success = true br.Msg = "系统处理中,请稍后重试" } } // Refresh // @Title 刷新卓创红期指标接口 // @Description 刷新卓创红期指标接口 // @Success 200 {object} models.RefreshEdbInfoReq // @router /refresh [post] func (this *SciHqController) Refresh() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() var req models.RefreshEdbInfoReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.EdbCode == "" { br.Msg = "请输入指标编码!" br.ErrMsg = "请输入指标编码,指标编码为空" return } if req.EdbInfoId < 0 { br.Msg = "请输入指标ID!" br.ErrMsg = "请输入指标ID" return } // 获取指标详情 edbInfo, err := models.GetEdbInfoByEdbCode(req.Source, req.EdbCode) if err != nil { br.Msg = "指标不存在!" br.ErrMsg = "指标不存在" return } isHandling, errMsg, err := logic.RefreshBaseEdbInfo(edbInfo, req.StartDate) if isHandling { br.Ret = 501 br.Success = true br.Msg = "系统处理中,请稍后重试" return } if err != nil { br.Msg = errMsg br.ErrMsg = err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" } // HandleExcelData // @Title 处理卓创红期指标的接口 // @Description 处理卓创红期指标的接口 // @Success 200 {object} models.HandleMysteelIndexResp // @router /handle/excel_data [post] func (this *SciHqController) HandleExcelData() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() var req []*models.HandleSciHqExcelDataReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } indexList, err := models.GetAllBaseFromSciHqIndex() if err != nil { br.Msg = "获取指标列表失败!" br.ErrMsg = "获取指标列表失败,Err:" + err.Error() return } allIndexMap := make(map[string]*models.BaseFromSciHqIndex) for _, v := range indexList { allIndexMap[v.IndexCode] = v } addSciHqIndexList := make([]*models.BaseFromSciHqIndex, 0) for _, v := range req { t := new(models.BaseFromSciHqIndex) if _, ok := allIndexMap[v.ExcelIndexCode]; !ok { t.ClassifyId = 0 t.IndexName = v.IndexName t.IndexCode = v.ExcelIndexCode t.Frequency = v.Frequency t.Unit = v.Unit t.TerminalCode = v.TerminalCode t.FilePath = v.FilePath t.CreateTime = time.Now() t.ModifyTime = time.Now() addSciHqIndexList = append(addSciHqIndexList, t) } } if len(addSciHqIndexList) > 0 { err = models.BatchAddBaseFromSciHqIndex(addSciHqIndexList) if err != nil { br.Msg = "添加指标失败!" br.ErrMsg = "添加指标失败,Err:" + err.Error() return } } indexList, err = models.GetAllBaseFromSciHqIndex() if err != nil { br.Msg = "获取指标列表失败!" br.ErrMsg = "获取指标列表失败,Err:" + err.Error() return } allIndexMap = make(map[string]*models.BaseFromSciHqIndex) for _, v := range indexList { allIndexMap[v.IndexCode] = v } for _, v := range req { if indexInfo, ok := allIndexMap[v.ExcelIndexCode]; !ok { utils.FileLog.Info("指标不存在,indexCode:" + v.ExcelIndexCode) continue } else { indexDataList, err := models.GetBaseFromSciHqDataByIndexCode(indexInfo.IndexCode) if err != nil { br.Msg = "获取指标数据失败!" br.ErrMsg = "获取指标数据失败,Err:" + err.Error() return } indexDataExistMap := make(map[string]*models.BaseFromSciHqData) for _, indexData := range indexDataList { indexDataExistMap[indexData.DataTime] = indexData } addSciHqDataList := make([]*models.BaseFromSciHqData, 0) for dataDate, dataVal := range v.Data { currDataTime, err := time.ParseInLocation(utils.FormatDate, dataDate, time.Local) if err != nil { utils.FileLog.Info("时间格式化失败,indexCode:" + v.ExcelIndexCode + "Err:" + err.Error()) continue } timestamp := currDataTime.UnixNano() / 1e6 sciHqData, ok := indexDataExistMap[dataDate] if !ok { tmpBaseFromSciData := &models.BaseFromSciHqData{ BaseFromSciHqIndexId: indexInfo.BaseFromSciHqIndexId, IndexCode: indexInfo.IndexCode, DataTime: dataDate, Value: dataVal, CreateTime: time.Now(), ModifyTime: time.Now(), DataTimestamp: timestamp, } addSciHqDataList = append(addSciHqDataList, tmpBaseFromSciData) } else { existValue := sciHqData.Value if dataVal != "" && existValue != dataVal { sciHqData.Value = dataVal sciHqData.ModifyTime = time.Now() if sciHqData.SciHqDataId > 0 { err = sciHqData.Update([]string{"value", "modify_time"}) if err != nil { utils.FileLog.Info("更新指标数据失败,indexCode:" + v.ExcelIndexCode + "Err:" + err.Error()) continue } } } } } if len(addSciHqDataList) > 0 { err = models.BatchAddBaseFromSciHqData(addSciHqDataList) if err != nil { utils.FileLog.Info("添加指标数据失败,indexCode:" + v.ExcelIndexCode + "Err:" + err.Error()) continue } } //修改最大最小日期 sciHqIndexMaxItem, err := models.GetSciHqIndexInfoMaxAndMinInfo(indexInfo.IndexCode) if err == nil && sciHqIndexMaxItem != nil { e := models.ModifySciHqIndexMaxAndMinInfo(indexInfo.IndexCode, sciHqIndexMaxItem) if e != nil { fmt.Println("ModifySciHqIndexMaxAndMinInfo Err:" + e.Error()) } } // 同步刷新ETA图库卓创红期的指标 { // 获取指标详情 edbInfo, err := models.GetEdbInfoByEdbCode(utils.DATA_SOURCE_SCI_HQ, indexInfo.IndexCode) if err != nil && err.Error() != utils.ErrNoRow() { utils.FileLog.Info("刷新指标异常,indexCode:" + v.ExcelIndexCode + "Err:" + err.Error()) continue } // 已经加入到指标库的话,那么就去更新ETA指标库吧 if edbInfo != nil { go logic.RefreshBaseEdbInfo(edbInfo, ``) } } } } br.Msg = "处理成功" br.Success = true br.Ret = 200 }