package future_good import ( "encoding/json" "hongze/hongze_edb_lib/controllers" "hongze/hongze_edb_lib/models" "hongze/hongze_edb_lib/models/future_good" "hongze/hongze_edb_lib/services" "hongze/hongze_edb_lib/utils" "time" ) // FutureGoodEdbInfoController 期货数据 type FutureGoodEdbInfoController struct { controllers.BaseAuthController } // Add // @Title 新增wind商品指标接口 // @Description 新增wind指标接口 // @Success 200 {object} models.AddEdbInfoReq // @router /add [post] func (this *FutureGoodEdbInfoController) Add() { br := new(models.BaseResponse).Init() var cacheKey string defer func() { 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 } req.EdbCode = utils.TrimStr(req.EdbCode) cacheKey = utils.CACHE_EDB_DATA_ADD + "_futuregood_" + req.EdbCode if !utils.Rc.IsExist(cacheKey) { utils.Rc.SetNX(cacheKey, 1, 1*time.Minute) defer func() { utils.Rc.Delete(cacheKey) }() //期货数据,就默认到今天,特殊处理下 futureGoodEdbInfo, err := future_good.GetFutureGoodEdbInfoByCode(req.EdbCode) if err != nil { if err.Error() != utils.ErrNoRow() { br.Msg = "系统内找不到该指标" } else { br.Msg = "添加失败" br.ErrMsg = "添加失败,ERR:" + err.Error() } return } //endDate := utils.BASE_END_DATE endDateTime := time.Now() //每天下午三点之前刷新数据的话,截止日期就到昨天,三点之后才刷新到今天的日期 if endDateTime.Hour() < 15 { endDateTime = endDateTime.AddDate(0, 0, -1) } endDate := time.Now().Format(utils.FormatDate) windUrl := utils.Hz_Wind_Data_Url_LIST[0].Url dataItem, errCode, err := services.GetFutureGoodDataFromWindUrl(windUrl, req.EdbCode, utils.BASE_START_DATE, endDate) //dataItem, errCode, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, endDate) if errCode == 421 { //指标超限 br.Ret = 421 br.Msg = "指标超限!" return } if err != nil { br.Msg = "获取指标信息失败!" br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error() return } err = future_good.AddEdbDataFromWind(futureGoodEdbInfo.FutureGoodEdbInfoId, req.EdbCode, dataItem) if err != nil { br.Msg = "获取指标信息失败!" br.ErrMsg = "获取指标信息失败 AddEdbDataFromWind,Err:" + err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" } else { br.Ret = 501 br.Success = true br.Msg = "系统处理中,请稍后重试" } } // Refresh // @Title 刷新wind期货数据指标接口 // @Description 刷新wind指标接口 // @Success 200 {object} models.RefreshEdbInfoReq // @router /refresh [post] func (this *FutureGoodEdbInfoController) Refresh() { br := new(models.BaseResponse).Init() var cacheKey string defer func() { this.Data["json"] = br this.ServeJSON() }() var req future_good.RefreshFutureEdbEdbInfoReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.FutureGoodEdbCode == "" { br.Msg = "请输入指标编码!" br.ErrMsg = "请输入指标编码,指标编码为空" return } if req.FutureGoodEdbInfoId <= 0 { br.Msg = "请输入指标ID!" br.ErrMsg = "请输入指标ID" return } cacheKey = utils.CACHE_EDB_DATA_REFRESH + "_futuregood_" + req.FutureGoodEdbCode if utils.Rc.IsExist(cacheKey) { br.Ret = 501 br.Success = true br.Msg = "系统处理中,请稍后重试" return } utils.Rc.SetNX(cacheKey, 1, 1*time.Minute) defer func() { utils.Rc.Delete(cacheKey) }() //获取指标信息 futureGoodEdbInfo, err := future_good.GetFutureGoodEdbInfoByCode(req.FutureGoodEdbCode) if err != nil { if err.Error() != utils.ErrNoRow() { br.Msg = "系统内找不到该指标" } else { br.Msg = "添加失败" br.ErrMsg = "添加失败,ERR:" + err.Error() } return } //期货数据,就默认到今天,特殊处理下 //endDate := utils.BASE_END_DATE endDateTime := time.Now() //每天下午三点之前刷新数据的话,截止日期就到昨天,三点之后才刷新到今天的日期 if endDateTime.Hour() < 15 { endDateTime = endDateTime.AddDate(0, 0, -1) } endDate := endDateTime.Format(utils.FormatDate) dataItem, errCode, err := services.GetFutureGoodDataFromWindUrl(futureGoodEdbInfo.ServerUrl, req.FutureGoodEdbCode, req.StartDate, endDate) if errCode == 421 { //指标超限 br.Ret = 421 } if err != nil { br.Msg = "获取指标信息失败!" br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error() return } err = future_good.RefreshFutureGoodEdbDataFromWind(req.FutureGoodEdbInfoId, req.FutureGoodEdbCode, req.StartDate, dataItem) if err != nil && err.Error() != utils.ErrNoRow() { br.Msg = "刷新指标信息失败!" br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromWind,Err:" + err.Error() return } // 更新指标最大最小值 err, errMsg := future_good.UnifiedModifyEdbInfoMaxAndMinInfo(futureGoodEdbInfo) if err != nil { br.Msg = errMsg br.ErrMsg = err.Error() return } br.Ret = 200 br.Success = true br.Msg = "获取成功" }