瀏覽代碼

1.6新增接口

hsun 1 年之前
父節點
當前提交
8302f89ab4

+ 171 - 0
controllers/data_manage/correlation/correlation_chart_info.go

@@ -7,6 +7,7 @@ import (
 	"hongze/hongze_ETA_mobile_api/controllers"
 	"hongze/hongze_ETA_mobile_api/models"
 	"hongze/hongze_ETA_mobile_api/models/data_manage"
+	"hongze/hongze_ETA_mobile_api/models/data_manage/future_good/request"
 	"hongze/hongze_ETA_mobile_api/models/system"
 	"hongze/hongze_ETA_mobile_api/services/data"
 	correlationServ "hongze/hongze_ETA_mobile_api/services/data/correlation"
@@ -396,6 +397,70 @@ func (this *CorrelationChartInfoController) List() {
 	br.Data = resp
 }
 
+// Refresh
+// @Title 图表刷新接口
+// @Description 图表刷新接口
+// @Param   ChartInfoId   query   int  true       "图表id"
+// @Param   UniqueCode   query   string  true       "唯一code"
+// @Success Ret=200 刷新成功
+// @router /chart_info/refresh [get]
+func (this *CorrelationChartInfoController) Refresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	chartInfoId, _ := this.GetInt("ChartInfoId")
+	uniqueCode := this.GetString("UniqueCode")
+	if chartInfoId <= 0 && uniqueCode == `` {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误:chartInfoId:" + strconv.Itoa(chartInfoId) + ",UniqueCode:" + uniqueCode
+		return
+	}
+
+	var chartInfo *data_manage.ChartInfo
+	var err error
+	if chartInfoId > 0 {
+		chartInfo, err = data_manage.GetChartInfoById(chartInfoId)
+	} else {
+		chartInfo, err = data_manage.GetChartInfoByUniqueCode(uniqueCode)
+	}
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除,无需刷新"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		br.Msg = "刷新失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 刷新相关性图表
+	if e := correlationServ.ChartInfoRefresh(chartInfo.ChartInfoId); e != nil {
+		br.Msg = "刷新失败"
+		br.ErrMsg = "刷新相关性图表失败, Err:" + err.Error()
+		return
+	}
+
+	//清除图表缓存
+	{
+		key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
+		_ = utils.Rc.Delete(key)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "刷新成功"
+}
+
 // Copy
 // @Title 复制并新增图表接口
 // @Description 新增图表接口
@@ -525,6 +590,112 @@ func (this *CorrelationChartInfoController) Copy() {
 	br.IsAddLog = true
 }
 
+// EnInfoEdit
+// @Title 编辑图表英文信息接口
+// @Description 编辑图表英文信息接口
+// @Param	request	body data_manage.EditChartEnInfoReq true "type json string"
+// @Success Ret=200 编辑成功
+// @router /chart_info/en/edit [post]
+func (this *CorrelationChartInfoController) EnInfoEdit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.EditChartEnInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.ChartNameEn = strings.Trim(req.ChartNameEn, " ")
+	if req.ChartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		return
+	}
+	if req.ChartNameEn == "" {
+		br.Msg = "请输入英文图表名称"
+		return
+	}
+
+	chartItem, _, tips, e := correlationServ.GetChartAndCorrelationInfo(req.ChartInfoId)
+	if e != nil {
+		if tips != "" {
+			br.Msg = tips
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取图表信息失败, Err: " + e.Error()
+		return
+	}
+
+	var condition string
+	var pars []interface{}
+	condition += " AND chart_info_id <> ?  AND chart_name_en = ? AND source = ?"
+	pars = append(pars, req.ChartInfoId, req.ChartNameEn, utils.CHART_SOURCE_CORRELATION)
+	existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
+	if err != nil {
+		if err.Error() != utils.ErrNoRow() {
+			br.Msg = "判断英文图表名称是否存在失败"
+			br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
+			return
+		}
+	}
+	if err == nil && existItem.ChartInfoId > 0 {
+		br.Msg = existItem.ChartName + ":" + req.ChartNameEn + "图表名称已存在"
+		return
+	}
+	chartItem.ChartNameEn = req.ChartNameEn
+	chartItem.ModifyTime = time.Now().Local()
+	if e := chartItem.Update([]string{"ChartNameEn", "ModifyTime"}); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新图表信息失败, Err: " + e.Error()
+		return
+	}
+
+	//添加es数据
+	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	//修改my eta es数据
+	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
+
+	//指标 修改es信息
+	//go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
+
+	//新增操作日志
+	{
+		chartLog := new(data_manage.ChartInfoLog)
+		chartLog.ChartName = chartItem.ChartName
+		chartLog.ChartInfoId = req.ChartInfoId
+		chartLog.ChartClassifyId = chartItem.ChartClassifyId
+		chartLog.SysUserId = sysUser.AdminId
+		chartLog.SysUserRealName = sysUser.RealName
+		chartLog.UniqueCode = chartItem.UniqueCode
+		chartLog.CreateTime = time.Now()
+		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Status = "编辑相关性图表英文信息"
+		chartLog.Method = this.Ctx.Input.URL()
+		go data_manage.AddChartInfoLog(chartLog)
+	}
+	// 清除缓存
+	if utils.Re == nil && utils.Rc != nil {
+		_ = utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
+		_ = utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "编辑成功"
+	br.IsAddLog = true
+}
+
 // SearchByEs
 // @Title 图表模糊搜索(从es获取)
 // @Description  图表模糊搜索(从es获取)

+ 63 - 0
controllers/data_manage/future_good/future_good_chart_info.go

@@ -314,6 +314,69 @@ func (this *FutureGoodChartInfoController) ChartInfoSearchByEs() {
 	br.Data = resp
 }
 
+// ChartInfoRefresh
+// @Title 图表刷新接口
+// @Description 图表刷新接口
+// @Param   ChartInfoId   query   int  true       "图表id"
+// @Param   UniqueCode   query   string  true       "唯一code"
+// @Success Ret=200 刷新成功
+// @router /chart_info/refresh [get]
+func (this *FutureGoodChartInfoController) ChartInfoRefresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	chartInfoId, _ := this.GetInt("ChartInfoId")
+	uniqueCode := this.GetString("UniqueCode")
+	if chartInfoId <= 0 && uniqueCode == `` {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误:chartInfoId:" + strconv.Itoa(chartInfoId) + ",UniqueCode:" + uniqueCode
+		return
+	}
+
+	var chartInfo *data_manage.ChartInfo
+	var err error
+	if chartInfoId > 0 {
+		chartInfo, err = data_manage.GetChartInfoById(chartInfoId)
+	} else {
+		chartInfo, err = data_manage.GetChartInfoByUniqueCode(uniqueCode)
+	}
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除,无需刷新"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		br.Msg = "刷新失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+	err = future_goodServ.FutureGoodChartInfoRefresh(chartInfo.ChartInfoId)
+	if err != nil {
+		br.Msg = "刷新失败"
+		br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
+		return
+	}
+
+	//清除图表缓存
+	{
+		key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
+		_ = utils.Rc.Delete(key)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "刷新成功"
+}
+
 // CopyChartInfo
 // @Title 复制并新增图表接口
 // @Description 新增图表接口

+ 172 - 112
controllers/data_manage/line_equation/line_chart_info.go

@@ -1125,6 +1125,66 @@ type LineEquationChartInfoController struct {
 //	br.IsAddLog = true
 //}
 
+// Refresh
+// @Title 图表刷新接口
+// @Description 图表刷新接口
+// @Param   ChartInfoId   query   int  true       "图表id"
+// @Param   UniqueCode   query   string  true       "唯一code"
+// @Success Ret=200 刷新成功
+// @router /chart_info/refresh [get]
+func (this *LineEquationChartInfoController) Refresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	chartInfoId, _ := this.GetInt("ChartInfoId")
+	uniqueCode := this.GetString("UniqueCode")
+	if chartInfoId <= 0 && uniqueCode == `` {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误:chartInfoId:" + strconv.Itoa(chartInfoId) + ",UniqueCode:" + uniqueCode
+		return
+	}
+
+	var chartInfo *data_manage.ChartInfo
+	var err error
+	if chartInfoId > 0 {
+		chartInfo, err = data_manage.GetChartInfoById(chartInfoId)
+	} else {
+		chartInfo, err = data_manage.GetChartInfoByUniqueCode(uniqueCode)
+	}
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除,无需刷新"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		br.Msg = "刷新失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 刷新图表的指标信息
+	err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
+
+	//清除图表缓存
+	{
+		key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
+		_ = utils.Rc.Delete(key)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "刷新成功"
+}
+
 // GetChartInfoDetailFromUniqueCode 根据编码获取图表详情
 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)
@@ -1263,118 +1323,118 @@ func GetChartInfoDetailFromUniqueCode(chartInfo *data_manage.ChartInfoView, isCa
 	return
 }
 
-//// EnInfoEdit
-//// @Title 编辑图表英文信息接口
-//// @Description 编辑图表英文信息接口
-//// @Param	request	body data_manage.EditChartEnInfoReq true "type json string"
-//// @Success Ret=200 编辑成功
-//// @router /chart_info/en/edit [post]
-//func (this *LineEquationChartInfoController) EnInfoEdit() {
-//	br := new(models.BaseResponse).Init()
-//	defer func() {
-//		this.Data["json"] = br
-//		this.ServeJSON()
-//	}()
-//	sysUser := this.SysUser
-//	if sysUser == nil {
-//		br.Msg = "请登录"
-//		br.ErrMsg = "请登录,SysUser Is Empty"
-//		br.Ret = 408
-//		return
-//	}
-//	var req request.EditChartEnInfoReq
-//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
-//	if err != nil {
-//		br.Msg = "参数解析异常!"
-//		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-//		return
-//	}
-//	req.ChartNameEn = strings.Trim(req.ChartNameEn, " ")
-//	if req.ChartInfoId <= 0 {
-//		br.Msg = "请选择图表"
-//		return
-//	}
-//	if req.ChartNameEn == "" {
-//		br.Msg = "请输入英文图表名称"
-//		return
-//	}
-//
-//	//判断指标名称是否存在
-//	chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
-//	if err != nil {
-//		if err.Error() == utils.ErrNoRow() {
-//			br.Msg = "图表已被删除,请刷新页面"
-//			br.ErrMsg = "图表已被删除,请刷新页面"
-//			return
-//		}
-//		br.Msg = "获取图表信息失败"
-//		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
-//		return
-//	}
-//
-//	// 校验名称是否有重复
-//	{
-//		var condition string
-//		var pars []interface{}
-//		condition += " AND chart_info_id <> ?  AND chart_name_en = ? AND source = ?"
-//		pars = append(pars, req.ChartInfoId, req.ChartNameEn, utils.CHART_SOURCE_LINE_EQUATION)
-//		existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
-//		if err != nil {
-//			if err.Error() != utils.ErrNoRow() {
-//				br.Msg = "判断英文图表名称是否存在失败"
-//				br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
-//				return
-//			}
-//		}
-//		if err == nil && existItem.ChartInfoId > 0 {
-//			br.Msg = existItem.ChartName + ":" + req.ChartNameEn + "图表名称已存在"
-//			return
-//		}
-//	}
-//
-//	chartItem.ChartNameEn = req.ChartNameEn
-//	chartItem.ModifyTime = time.Now().Local()
-//	if e := chartItem.Update([]string{"ChartNameEn", "ModifyTime"}); e != nil {
-//		br.Msg = "操作失败"
-//		br.ErrMsg = "更新图表信息失败, Err: " + e.Error()
-//		return
-//	}
-//
-//	//添加es数据
-//	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
-//	//修改my eta es数据
-//	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
-//
-//	//指标 修改es信息
-//	//go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
-//
-//	//新增操作日志
-//	{
-//		chartLog := new(data_manage.ChartInfoLog)
-//		chartLog.ChartName = chartItem.ChartName
-//		chartLog.ChartInfoId = req.ChartInfoId
-//		chartLog.ChartClassifyId = chartItem.ChartClassifyId
-//		chartLog.SysUserId = sysUser.AdminId
-//		chartLog.SysUserRealName = sysUser.RealName
-//		chartLog.UniqueCode = chartItem.UniqueCode
-//		chartLog.CreateTime = time.Now()
-//		chartLog.Content = string(this.Ctx.Input.RequestBody)
-//		chartLog.Status = "编辑拟合方程图表英文信息"
-//		chartLog.Method = this.Ctx.Input.URL()
-//		go data_manage.AddChartInfoLog(chartLog)
-//	}
-//	// 清除缓存
-//	if utils.Re == nil && utils.Rc != nil {
-//		_ = utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
-//		_ = utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
-//	}
-//
-//	br.Ret = 200
-//	br.Success = true
-//	br.Msg = "编辑成功"
-//	br.IsAddLog = true
-//}
-//
+// EnInfoEdit
+// @Title 编辑图表英文信息接口
+// @Description 编辑图表英文信息接口
+// @Param	request	body data_manage.EditChartEnInfoReq true "type json string"
+// @Success Ret=200 编辑成功
+// @router /chart_info/en/edit [post]
+func (this *LineEquationChartInfoController) EnInfoEdit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.EditChartEnInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.ChartNameEn = strings.Trim(req.ChartNameEn, " ")
+	if req.ChartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		return
+	}
+	if req.ChartNameEn == "" {
+		br.Msg = "请输入英文图表名称"
+		return
+	}
+
+	//判断指标名称是否存在
+	chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除,请刷新页面"
+			br.ErrMsg = "图表已被删除,请刷新页面"
+			return
+		}
+		br.Msg = "获取图表信息失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 校验名称是否有重复
+	{
+		var condition string
+		var pars []interface{}
+		condition += " AND chart_info_id <> ?  AND chart_name_en = ? AND source = ?"
+		pars = append(pars, req.ChartInfoId, req.ChartNameEn, utils.CHART_SOURCE_LINE_EQUATION)
+		existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
+		if err != nil {
+			if err.Error() != utils.ErrNoRow() {
+				br.Msg = "判断英文图表名称是否存在失败"
+				br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
+				return
+			}
+		}
+		if err == nil && existItem.ChartInfoId > 0 {
+			br.Msg = existItem.ChartName + ":" + req.ChartNameEn + "图表名称已存在"
+			return
+		}
+	}
+
+	chartItem.ChartNameEn = req.ChartNameEn
+	chartItem.ModifyTime = time.Now().Local()
+	if e := chartItem.Update([]string{"ChartNameEn", "ModifyTime"}); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新图表信息失败, Err: " + e.Error()
+		return
+	}
+
+	//添加es数据
+	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	//修改my eta es数据
+	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
+
+	//指标 修改es信息
+	//go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
+
+	//新增操作日志
+	{
+		chartLog := new(data_manage.ChartInfoLog)
+		chartLog.ChartName = chartItem.ChartName
+		chartLog.ChartInfoId = req.ChartInfoId
+		chartLog.ChartClassifyId = chartItem.ChartClassifyId
+		chartLog.SysUserId = sysUser.AdminId
+		chartLog.SysUserRealName = sysUser.RealName
+		chartLog.UniqueCode = chartItem.UniqueCode
+		chartLog.CreateTime = time.Now()
+		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Status = "编辑拟合方程图表英文信息"
+		chartLog.Method = this.Ctx.Input.URL()
+		go data_manage.AddChartInfoLog(chartLog)
+	}
+	// 清除缓存
+	if utils.Re == nil && utils.Rc != nil {
+		_ = utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
+		_ = utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "编辑成功"
+	br.IsAddLog = true
+}
+
 //// SearchByEs
 //// @Title 图表模糊搜索(从es获取)
 //// @Description  图表模糊搜索(从es获取)

+ 317 - 0
controllers/data_manage/line_feature/chart_info.go

@@ -0,0 +1,317 @@
+package line_feature
+
+import (
+	"encoding/json"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hongze_ETA_mobile_api/controllers"
+	"hongze/hongze_ETA_mobile_api/models"
+	"hongze/hongze_ETA_mobile_api/models/data_manage"
+	"hongze/hongze_ETA_mobile_api/models/data_manage/line_feature/request"
+	"hongze/hongze_ETA_mobile_api/services/data"
+	"hongze/hongze_ETA_mobile_api/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// LineFeaturesChartInfoController 统计特征图表管理
+type LineFeaturesChartInfoController struct {
+	controllers.BaseAuthController
+}
+
+// Refresh
+// @Title 图表刷新接口
+// @Description 图表刷新接口
+// @Param   ChartInfoId   query   int  true       "图表id"
+// @Param   UniqueCode   query   string  true       "唯一code"
+// @Success Ret=200 刷新成功
+// @router /chart_info/refresh [get]
+func (this *LineFeaturesChartInfoController) Refresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	chartInfoId, _ := this.GetInt("ChartInfoId")
+	uniqueCode := this.GetString("UniqueCode")
+	if chartInfoId <= 0 && uniqueCode == `` {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误:chartInfoId:" + strconv.Itoa(chartInfoId) + ",UniqueCode:" + uniqueCode
+		return
+	}
+
+	var chartInfo *data_manage.ChartInfo
+	var err error
+	if chartInfoId > 0 {
+		chartInfo, err = data_manage.GetChartInfoById(chartInfoId)
+	} else {
+		chartInfo, err = data_manage.GetChartInfoByUniqueCode(uniqueCode)
+	}
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除,无需刷新"
+			br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
+			return
+		}
+		br.Msg = "刷新失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 刷新图表的指标信息
+	err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
+
+	//清除图表缓存
+	{
+		key := utils.HZ_CHART_LIB_DETAIL + chartInfo.UniqueCode
+		_ = utils.Rc.Delete(key)
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "刷新成功"
+}
+
+// EnInfoEdit
+// @Title 编辑图表英文信息接口
+// @Description 编辑图表英文信息接口
+// @Param	request	body data_manage.EditChartEnInfoReq true "type json string"
+// @Success Ret=200 编辑成功
+// @router /chart_info/en/edit [post]
+func (this *LineFeaturesChartInfoController) EnInfoEdit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.EditChartEnInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.ChartNameEn = strings.Trim(req.ChartNameEn, " ")
+	if req.ChartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		return
+	}
+	if req.ChartNameEn == "" {
+		br.Msg = "请输入英文图表名称"
+		return
+	}
+
+	//判断指标名称是否存在
+	chartItem, err := data_manage.GetChartInfoById(req.ChartInfoId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除,请刷新页面"
+			br.ErrMsg = "图表已被删除,请刷新页面"
+			return
+		}
+		br.Msg = "获取图表信息失败"
+		br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 校验名称是否有重复
+	{
+		var condition string
+		var pars []interface{}
+		condition += " AND chart_info_id <> ?  AND chart_name_en = ? AND source in (?,?,?)"
+		pars = append(pars, req.ChartInfoId, req.ChartNameEn, utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION, utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE, utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY)
+		existItem, err := data_manage.GetChartInfoByCondition(condition, pars)
+		if err != nil {
+			if err.Error() != utils.ErrNoRow() {
+				br.Msg = "判断英文图表名称是否存在失败"
+				br.ErrMsg = "判断英文图表名称是否存在失败,Err:" + err.Error()
+				return
+			}
+		}
+		if err == nil && existItem.ChartInfoId > 0 {
+			br.Msg = existItem.ChartName + ":" + req.ChartNameEn + "图表名称已存在"
+			return
+		}
+	}
+
+	chartItem.ChartNameEn = req.ChartNameEn
+	chartItem.ModifyTime = time.Now().Local()
+	if e := chartItem.Update([]string{"ChartNameEn", "ModifyTime"}); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新图表信息失败, Err: " + e.Error()
+		return
+	}
+
+	//添加es数据
+	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	//修改my eta es数据
+	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
+
+	//指标 修改es信息
+	//go data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
+
+	//新增操作日志
+	{
+		chartLog := new(data_manage.ChartInfoLog)
+		chartLog.ChartName = chartItem.ChartName
+		chartLog.ChartInfoId = req.ChartInfoId
+		chartLog.ChartClassifyId = chartItem.ChartClassifyId
+		chartLog.SysUserId = sysUser.AdminId
+		chartLog.SysUserRealName = sysUser.RealName
+		chartLog.UniqueCode = chartItem.UniqueCode
+		chartLog.CreateTime = time.Now()
+		chartLog.Content = string(this.Ctx.Input.RequestBody)
+		chartLog.Status = "编辑统计特征图表英文信息"
+		chartLog.Method = this.Ctx.Input.URL()
+		go data_manage.AddChartInfoLog(chartLog)
+	}
+	// 清除缓存
+	if utils.Re == nil && utils.Rc != nil {
+		_ = utils.Rc.Delete(utils.HZ_CHART_LIB_DETAIL + chartItem.UniqueCode) //图表分享链接缓存
+		_ = utils.Rc.Delete(data.GetChartInfoDataKey(req.ChartInfoId))
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "编辑成功"
+	br.IsAddLog = true
+}
+
+// SearchByEs
+// @Title 图表模糊搜索(从es获取)
+// @Description  图表模糊搜索(从es获取)
+// @Param   Keyword   query   string  true       "图表名称"
+// @Param   IsShowMe   query   bool  true       "是否只看我的,true、false"
+// @Param   Source   query   int  true       "来源,3:统计特征,4:滚动统计特征,默认0:全部"
+// @Success 200 {object} data_manage.ChartInfo
+// @router /chart_info/search_by_es [get]
+func (this *LineFeaturesChartInfoController) SearchByEs() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	keyword := this.GetString("Keyword")
+
+	//只看我的
+	isShowMe, _ := this.GetBool("IsShowMe")
+	showSysId := 0
+	if isShowMe {
+		showSysId = sysUser.AdminId
+	}
+
+	sourceList := []int{utils.CHART_SOURCE_LINE_FEATURE_STANDARD_DEVIATION, utils.CHART_SOURCE_LINE_FEATURE_PERCENTILE, utils.CHART_SOURCE_LINE_FEATURE_FREQUENCY}
+
+	var searchList []*data_manage.ChartInfo
+	var total int64
+	var err error
+
+	// 获取当前账号的不可见指标
+	noPermissionChartIdList := make([]int, 0)
+	{
+		obj := data_manage.EdbInfoNoPermissionAdmin{}
+		confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range confList {
+			noPermissionChartIdList = append(noPermissionChartIdList, v.ChartInfoId)
+		}
+	}
+
+	if keyword != "" {
+		searchList, total, err = data.EsSearchChartInfo(keyword, showSysId, sourceList, noPermissionChartIdList, startSize, pageSize)
+	} else {
+		total, searchList, err = data_manage.ChartInfoSearchByEmptyKeyWord(showSysId, sourceList, noPermissionChartIdList)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+			return
+		}
+	}
+
+	finalList := make([]*data_manage.ChartInfoMore, 0)
+	if len(searchList) > 0 {
+		chartInfoIds := ""
+		chartEdbMap := make(map[int][]*data_manage.ChartEdbInfoMapping)
+		for _, v := range searchList {
+			chartInfoIds += strconv.Itoa(v.ChartInfoId) + ","
+		}
+		if chartInfoIds != "" {
+			chartInfoIds = strings.Trim(chartInfoIds, ",")
+			//判断是否需要展示英文标识
+			edbList, e := data_manage.GetChartEdbMappingListByChartInfoIds(chartInfoIds)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取图表,指标信息失败,Err:" + e.Error()
+				return
+			}
+			for _, v := range edbList {
+				chartEdbMap[v.ChartInfoId] = append(chartEdbMap[v.ChartInfoId], v)
+			}
+		}
+
+		for _, v := range searchList {
+			tmp := new(data_manage.ChartInfoMore)
+			tmp.ChartInfo = *v
+			//判断是否需要展示英文标识
+			if _, ok := chartEdbMap[v.ChartInfoId]; ok {
+				tmp.IsEnChart = data.CheckIsEnChart(v.ChartNameEn, []*data_manage.ChartEdbInfoMapping{}, v.Source, v.ChartType)
+			}
+			finalList = append(finalList, tmp)
+		}
+	}
+	//新增搜索词记录
+	{
+		searchKeyword := new(data_manage.SearchKeyword)
+		searchKeyword.KeyWord = keyword
+		searchKeyword.CreateTime = time.Now()
+		go data_manage.AddSearchKeyword(searchKeyword)
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, int(total))
+	resp := data_manage.ChartInfoListByEsResp{
+		Paging: page,
+		List:   finalList,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 88 - 4
models/data_manage/future_good/request/future_good_chart.go

@@ -3,10 +3,50 @@ package request
 import "hongze/hongze_ETA_mobile_api/models/data_manage"
 
 type EditChartEnInfoReq struct {
-	ChartInfoId int    `description:"图表ID"`
-	ChartNameEn string `description:"英文图表名称"`
-	EdbNameEn   string `description:"指标英文名称"`
-	UnitEn      string `description:"指标英文单位"`
+	ChartInfoId      int    `description:"图表ID"`
+	ChartNameEn      string `description:"英文图表名称"`
+	EdbNameEn        string `description:"指标英文名称"`
+	UnitEn           string `description:"指标英文单位"`
+	ProfitNameEn     string `description:"利润英文名称"`
+	FutureGoodNameEn string `description:"期货合约英文名称"`
+}
+
+type AddChartInfoReq struct {
+	ChartEdbInfoList []*data_manage.ChartSaveItem `description:"指标及配置信息"`
+	ChartClassifyId  int                          `description:"分类id"`
+	ChartName        string                       `description:"图表名称"`
+	ChartType        int                          `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图"`
+	DateType         int                          `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:起始日期至今"`
+	StartDate        string                       `description:"自定义开始日期"`
+	EndDate          string                       `description:"自定义结束日期"`
+	Calendar         string                       `description:"公历/农历"`
+	SeasonStartDate  string                       `description:"季节性图开始日期"`
+	SeasonEndDate    string                       `description:"季节性图开始日期"`
+	LeftMin          string                       `description:"图表左侧最小值"`
+	LeftMax          string                       `description:"图表左侧最大值"`
+	RightMin         string                       `description:"图表右侧最小值"`
+	RightMax         string                       `description:"图表右侧最大值"`
+	Extra            ChartInfoReq                 `description:"图形图的配置"`
+}
+
+// EditChartInfoReq 编辑商品利润图表的请求
+type EditChartInfoReq struct {
+	ChartInfoId      int                          `description:"图表ID"`
+	ChartName        string                       `description:"图表名称"`
+	ChartClassifyId  int                          `description:"分类id"`
+	ChartEdbInfoList []*data_manage.ChartSaveItem `description:"指标及配置信息"`
+	ChartType        int                          `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图,10:截面散点图"`
+	DateType         int                          `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间,6:起始日期至今"`
+	StartDate        string                       `description:"自定义开始日期"`
+	EndDate          string                       `description:"自定义结束日期"`
+	Calendar         string                       `description:"公历/农历"`
+	SeasonStartDate  string                       `description:"季节性图开始日期"`
+	SeasonEndDate    string                       `description:"季节性图开始日期"`
+	LeftMin          string                       `description:"图表左侧最小值"`
+	LeftMax          string                       `description:"图表左侧最大值"`
+	RightMin         string                       `description:"图表右侧最小值"`
+	RightMax         string                       `description:"图表右侧最大值"`
+	Extra            ChartInfoReq                 `description:"图形图的配置"`
 }
 
 // ChartInfoReq 图表预览请求数据
@@ -26,3 +66,47 @@ type ChartInfoDateReq struct {
 	Color string `description:"颜色"`
 	Name  string `description:"别名"`
 }
+
+// SectionScatterReq 截面散点请求
+type SectionScatterReq struct {
+	XName       string `description:"x轴名称"`
+	XNameEn     string `description:"x轴名称(英文)"`
+	XUnitName   string `description:"x轴单位名称"`
+	XUnitNameEn string `description:"x轴单位名称(英文)"`
+	YName       string `description:"y轴名称"`
+	YNameEn     string `description:"y轴名称(英文)"`
+	YUnitName   string `description:"y轴单位名称"`
+	YUnitNameEn string `description:"y轴单位名称(英文)"`
+	XMinValue   string `description:"X轴的最小值"`
+	XMaxValue   string `description:"X轴的最大值"`
+	YMinValue   string `description:"Y轴的最小值"`
+	YMaxValue   string `description:"Y轴的最大值"`
+	//EdbList     []SectionScatterEdbItemReq    `description:"指标数据"`
+	SeriesList []SectionScatterSeriesItemReq `description:"系列数据"`
+}
+
+// SectionScatterSeriesItemReq 系列的请求
+type SectionScatterSeriesItemReq struct {
+	Name            string `description:"系列名"`
+	NameEn          string `description:"系列名(英文名)"`
+	Color           string `description:"颜色"`
+	EdbInfoList     []SectionScatterEdbItemReq
+	ShowTrendLine   bool `description:"是否展示趋势线"`
+	ShowFitEquation bool `description:"是否展示方程式"`
+	ShowRSquare     bool `description:"是否展示R平方"`
+}
+
+// SectionScatterEdbItemReq 截面散点请求的指标
+type SectionScatterEdbItemReq struct {
+	XEdbInfoId int    `description:"X轴的指标ID"`
+	YEdbInfoId int    `description:"Y轴的指标ID"`
+	Name       string `description:"别名"`
+	NameEn     string `description:"英文别名"`
+	XDateType  int    `description:"X轴的日期配置类型"`
+	XDate      string `description:"X轴的日期固定日期"`
+	XDateValue int    `description:"X轴的日期N天的值"`
+	YDateType  int    `description:"Y轴的日期配置类型"`
+	YDate      string `description:"Y轴的日期固定日期"`
+	YDateValue int    `description:"Y轴的日期N天的值"`
+	IsShow     bool   `description:"是否展示"`
+}

+ 72 - 0
routers/commentsRouter.go

@@ -25,6 +25,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"],
+        beego.ControllerComments{
+            Method: "EnInfoEdit",
+            Router: `/chart_info/en/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"],
         beego.ControllerComments{
             Method: "List",
@@ -34,6 +43,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"],
+        beego.ControllerComments{
+            Method: "Refresh",
+            Router: `/chart_info/refresh`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/correlation:CorrelationChartInfoController"],
         beego.ControllerComments{
             Method: "SearchByEs",
@@ -61,6 +79,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/future_good:FutureGoodChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/future_good:FutureGoodChartInfoController"],
+        beego.ControllerComments{
+            Method: "ChartInfoRefresh",
+            Router: `/chart_info/refresh`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/future_good:FutureGoodChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/future_good:FutureGoodChartInfoController"],
         beego.ControllerComments{
             Method: "ChartInfoSearchByEs",
@@ -71,6 +98,51 @@ func init() {
             Params: nil})
 
     beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_equation:LineEquationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_equation:LineEquationChartInfoController"],
+        beego.ControllerComments{
+            Method: "EnInfoEdit",
+            Router: `/chart_info/en/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_equation:LineEquationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_equation:LineEquationChartInfoController"],
+        beego.ControllerComments{
+            Method: "Refresh",
+            Router: `/chart_info/refresh`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_equation:LineEquationChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_equation:LineEquationChartInfoController"],
+        beego.ControllerComments{
+            Method: "SearchByEs",
+            Router: `/chart_info/search_by_es`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_feature:LineFeaturesChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_feature:LineFeaturesChartInfoController"],
+        beego.ControllerComments{
+            Method: "EnInfoEdit",
+            Router: `/chart_info/en/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_feature:LineFeaturesChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_feature:LineFeaturesChartInfoController"],
+        beego.ControllerComments{
+            Method: "Refresh",
+            Router: `/chart_info/refresh`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_feature:LineFeaturesChartInfoController"] = append(beego.GlobalControllerRouter["hongze/hongze_ETA_mobile_api/controllers/data_manage/line_feature:LineFeaturesChartInfoController"],
         beego.ControllerComments{
             Method: "SearchByEs",
             Router: `/chart_info/search_by_es`,

+ 64 - 1
services/data/correlation/chart_info.go

@@ -1,11 +1,13 @@
 package correlation
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"github.com/shopspring/decimal"
 	"hongze/hongze_ETA_mobile_api/models/data_manage"
 	"hongze/hongze_ETA_mobile_api/models/system"
+	"hongze/hongze_ETA_mobile_api/services/alarm_msg"
 	"hongze/hongze_ETA_mobile_api/services/data"
 	"hongze/hongze_ETA_mobile_api/utils"
 	"math"
@@ -420,7 +422,7 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *d
 	case 0:
 		aDataList, err = data_manage.GetEdbDataList(baseEdbInfo.Source, baseEdbInfo.EdbInfoId, startDate, endDate)
 	case 1:
-		_, aDataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(baseEdbInfo.EdbInfoId, startDate, endDate, false)
+		_, aDataList, _, _, err, _ = data.GetPredictDataListByPredictEdbInfoId(baseEdbInfo.EdbInfoId, startDate, endDate, true)
 	default:
 		err = errors.New("指标base类型异常")
 		return
@@ -474,7 +476,11 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *d
 	// 计算 每个日期的相关性值
 	{
 		startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+		if endDate == `` {
+			endDate = baseEdbInfo.EndDate
+		}
 		endDateTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+		endDateTime = endDateTime.AddDate(0, 0, -(calculateDay - 1))
 
 		for currDay := startDateTime; !currDay.After(endDateTime); currDay = currDay.AddDate(0, 0, 1) {
 			yCalculateData := make([]float64, 0)
@@ -513,6 +519,63 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *d
 	return
 }
 
+// ChartInfoRefresh 图表刷新
+func ChartInfoRefresh(chartInfoId int) (err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("CorrelationChartInfoRefresh: "+errMsg, 3)
+		}
+	}()
+	correlationChart := new(data_manage.ChartInfoCorrelation)
+	if err = correlationChart.GetItemById(chartInfoId); err != nil {
+		errMsg = "获取相关性图表失败, Err: " + err.Error()
+		return
+	}
+
+	// 批量刷新ETA指标
+	err = data.EdbInfoRefreshAllFromBaseV3([]int{correlationChart.EdbInfoIdFirst, correlationChart.EdbInfoIdSecond}, false)
+	if err != nil {
+		return
+	}
+
+	// 重新生成数据并更新
+	edbInfoMappingA, err := data_manage.GetChartEdbMappingByEdbInfoId(correlationChart.EdbInfoIdFirst)
+	if err != nil {
+		errMsg = "获取相关性图表, A指标mapping信息失败, Err:" + err.Error()
+		return
+	}
+	edbInfoMappingB, err := data_manage.GetChartEdbMappingByEdbInfoId(correlationChart.EdbInfoIdSecond)
+	if err != nil {
+		errMsg = "获取相关性图表, B指标mapping信息失败, Err:" + err.Error()
+		return
+	}
+	periodData, correlationData, err := GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.StartDate.Format(utils.FormatDate), correlationChart.EndDate.Format(utils.FormatDate))
+	if err != nil {
+		errMsg = "获取相关性图表, 图表计算值失败, Err:" + err.Error()
+		return
+	}
+	periodDataByte, err := json.Marshal(periodData)
+	if err != nil {
+		errMsg = "相关性图表, X轴信息有误, Err:" + err.Error()
+		return
+	}
+	correlationDataByte, err := json.Marshal(correlationData[0].Value)
+	if err != nil {
+		errMsg = "相关性图表, Y轴信息有误, Err:" + err.Error()
+		return
+	}
+	correlationChart.PeriodData = string(periodDataByte)
+	correlationChart.CorrelationData = string(correlationDataByte)
+	correlationChart.ModifyTime = time.Now().Local()
+	correlationUpdateCols := []string{"PeriodData", "CorrelationData", "ModifyTime"}
+	if err = correlationChart.Update(correlationUpdateCols); err != nil {
+		errMsg = "更新相关性图表失败, Err:" + err.Error()
+		return
+	}
+	return
+}
+
 // AddChartInfo 添加图表
 func AddChartInfo(req data_manage.AddChartInfoReq, source int, sysUser *system.Admin) (chartInfo *data_manage.ChartInfo, err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true

+ 91 - 0
services/data/future_good/base_future_good_lib.go

@@ -0,0 +1,91 @@
+package future_good
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_ETA_mobile_api/models"
+	"hongze/hongze_ETA_mobile_api/models/data_manage"
+	"hongze/hongze_ETA_mobile_api/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+)
+
+type AddPredictEdbDataResponse struct {
+	Ret         int
+	Msg         string
+	ErrMsg      string
+	ErrCode     string
+	Data        data_manage.AddEdbInfoResp
+	Success     bool `description:"true 执行成功,false 执行失败"`
+	IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
+	IsAddLog    bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
+}
+
+// AddEdbData 添加指标数据
+func AddEdbData(futureGoodEdbCode string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = futureGoodEdbCode
+	urlStr := `future_good/add`
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// RefreshEdbData 刷新指标数据
+func RefreshEdbData(futureGoodEdbInfoId int, futureGoodEdbCode, startDate string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["FutureGoodEdbCode"] = futureGoodEdbCode
+	param["FutureGoodEdbInfoId"] = futureGoodEdbInfoId
+	param["StartDate"] = startDate
+	urlStr := `future_good/refresh`
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// RefreshEdbRelation 刷新商品期货指标相关的数据
+func RefreshEdbRelation(futureGoodEdbInfoId int) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["FutureGoodEdbInfoId"] = futureGoodEdbInfoId
+	urlStr := `future_good/relation/refresh`
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// postRefreshEdbData 刷新指标数据
+func postRefreshEdbData(param map[string]interface{}, urlStr string) (resp *models.BaseResponse, err error) {
+	postUrl := utils.EDB_LIB_URL + urlStr
+	postData, err := json.Marshal(param)
+	if err != nil {
+		return
+	}
+	result, err := HttpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+	utils.FileLog.Info("postRefreshEdbData:" + postUrl + ";" + string(postData) + ";result:" + string(result))
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+	return resp, nil
+}
+
+func HttpPost(url, postData string, params ...string) ([]byte, error) {
+	body := ioutil.NopCloser(strings.NewReader(postData))
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", url, body)
+	if err != nil {
+		return nil, err
+	}
+	contentType := "application/x-www-form-urlencoded;charset=utf-8"
+	if len(params) > 0 && params[0] != "" {
+		contentType = params[0]
+	}
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("authorization", utils.MD5(utils.APP_EDB_LIB_NAME_EN+utils.EDB_LIB_Md5_KEY))
+	resp, err := client.Do(req)
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	fmt.Println("HttpPost:" + string(b))
+	return b, err
+}

+ 47 - 0
services/data/future_good/chart_info.go

@@ -6,6 +6,7 @@ import (
 	"github.com/shopspring/decimal"
 	"hongze/hongze_ETA_mobile_api/models/data_manage"
 	future_good2 "hongze/hongze_ETA_mobile_api/models/data_manage/future_good"
+	"hongze/hongze_ETA_mobile_api/services/alarm_msg"
 	"hongze/hongze_ETA_mobile_api/services/data"
 	"hongze/hongze_ETA_mobile_api/utils"
 	"sort"
@@ -876,3 +877,49 @@ func GetNeedDateData(needDateTime time.Time, dataList []*data_manage.EdbDataList
 
 	return
 }
+
+// FutureGoodChartInfoRefresh
+// @author Roc
+// @datetime 2023-2-2 18:44:46
+// @description 商品价格曲线图表刷新
+func FutureGoodChartInfoRefresh(chartInfoId int) (err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("ChartInfoRefresh:"+errMsg, 3)
+			fmt.Println("ChartInfoRefresh Err:" + errMsg)
+		}
+	}()
+
+	edbInfoMapping, err := data_manage.GetEtaEdbChartEdbMapping(chartInfoId)
+	if err != nil {
+		errMsg = "获取需要刷新的ETA指标失败:Err:" + err.Error()
+		return
+	}
+	// 获取期货指标
+	futureGoodEdbInfoMapping, err := data_manage.GetFutureGoodEdbChartEdbMapping(chartInfoId)
+	if err != nil {
+		errMsg = "获取需要刷新的商品期货指标失败:Err:" + err.Error()
+		return
+	}
+
+	// 获取期货指标以及期货数据
+	futureGoodEdbInfoList, err := future_good2.GetFutureGoodEdbInfoListByParentId(futureGoodEdbInfoMapping.EdbInfoId)
+	if err != nil {
+		return
+	}
+
+	// 批量刷新ETA指标
+	err = data.EdbInfoRefreshAllFromBaseV3([]int{edbInfoMapping.EdbInfoId}, false)
+	if err != nil {
+		return
+	}
+
+	// 批量刷新期货指标
+	err = FutureGoodEdbInfoRefreshAllFromBase(futureGoodEdbInfoList, false)
+	if err != nil {
+		return
+	}
+
+	return
+}

+ 64 - 0
services/data/future_good/future_edb_info.go

@@ -0,0 +1,64 @@
+package future_good
+
+import (
+	"fmt"
+	"hongze/hongze_ETA_mobile_api/models/data_manage/future_good"
+	"hongze/hongze_ETA_mobile_api/services/alarm_msg"
+	"hongze/hongze_ETA_mobile_api/utils"
+	"time"
+)
+
+// FutureGoodEdbInfoRefreshAllFromBase 批量刷新商品期货指标
+// @author Roc
+// @datetime 2022-09-16 11:04:44
+// @description 将原有的单个指标刷新,调整为批量多个指标刷新
+func FutureGoodEdbInfoRefreshAllFromBase(futureGoodEdbInfoList []*future_good.FutureGoodEdbInfo, refreshAll bool) (err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			fmt.Println("FutureGoodEdbInfoRefreshAllFromBase Err:" + err.Error() + ";errMsg:" + errMsg)
+			go alarm_msg.SendAlarmMsg("FutureGoodEdbInfoRefreshAllFromBase,Err"+err.Error()+";errMsg:"+errMsg, 3)
+		}
+	}()
+	var startDate string
+	for _, bv := range futureGoodEdbInfoList {
+		if bv.StartDate == "0000-00-00" {
+			continue
+		}
+		//开始时间
+		startDate = ``
+		if refreshAll { //刷新所有数据,用开始时间作为起始日期去刷新
+			sTime, err := time.Parse(utils.FormatDate, bv.StartDate)
+			if err != nil {
+				return err
+			}
+			startDate = sTime.Format(utils.FormatDate)
+		} else {
+			sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
+			if err != nil {
+				return err
+			}
+			limitDay := utils.DATA_START_REFRESH_LIMIT
+			startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
+		}
+		result, err := RefreshEdbData(bv.FutureGoodEdbInfoId, bv.FutureGoodEdbCode, startDate)
+		if err != nil {
+			fmt.Println(bv.FutureGoodEdbInfoId, "FutureGoodRefreshBaseEdbData err", time.Now())
+			errMsg = "FutureGoodRefreshBaseEdbData Err:" + err.Error()
+			return err
+		}
+		if result.Ret != 200 {
+			fmt.Println(bv.FutureGoodEdbInfoId, "FutureGoodRefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
+			errMsg = fmt.Sprint(bv.FutureGoodEdbInfoId, "FutureGoodRefreshBaseEdbData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
+			return fmt.Errorf("刷新失败, err:%s", errMsg)
+		}
+	}
+
+	// 刷新商品期货指标相关的数据
+	for _, bv := range futureGoodEdbInfoList {
+		if bv.ParentId == 0 {
+			RefreshEdbRelation(bv.FutureGoodEdbInfoId)
+		}
+	}
+	return err
+}