Quellcode durchsuchen

Merge branch 'master' into feature/eta2.1.2_predict_edb

xyxie vor 5 Monaten
Ursprung
Commit
4c2249acea

+ 26 - 0
controller/base_config.go

@@ -0,0 +1,26 @@
+package controller
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/response"
+	response2 "hongze/hongze_yb/models/response"
+	"hongze/hongze_yb/services/base_config"
+)
+
+// GetBusinessConf
+// @Tags 公共模块
+// @Summary  获取基本配置信息
+// @Description 获取基本配置信息
+// @Param Authorization	header string true "微信登录后获取到的token"
+// @Success 200 {object} []logic.ApplyVariety "获取成功"
+// @failure 400 {string} string "获取失败"
+// @Router /base/business_conf [get]
+func GetBusinessConf(c *gin.Context) {
+	disclaimer, err := base_config.GetBusinessConfDisclaimer()
+	if err != nil {
+		response.FailData("获取失败", "获取配置信息失败,Err:"+err.Error(), c)
+		return
+	}
+	data := response2.BusinessConfResp{Disclaimer: disclaimer}
+	response.OkData("获取成功", data, c)
+}

+ 71 - 0
controller/chart/chart_common.go

@@ -16,6 +16,7 @@ import (
 	"hongze/hongze_yb/models/tables/chart_info_future_good_profit"
 	"hongze/hongze_yb/models/tables/chart_info_log"
 	"hongze/hongze_yb/models/tables/yb_my_chart"
+	"hongze/hongze_yb/services"
 	"hongze/hongze_yb/services/alarm_msg"
 	"hongze/hongze_yb/services/chart"
 	"hongze/hongze_yb/services/chart/correlation"
@@ -114,6 +115,8 @@ func CommonChartInfoDetailFromUniqueCode(c *gin.Context) {
 		resp, isOk, msg, errMsg = getLineFeatureChartInfoDetailFromUniqueCode(chartInfo, myChartClassifyId, user.GetInfoByClaims(c))
 	case utils.CHART_SOURCE_CROSS_HEDGING:
 		resp, isOk, msg, errMsg = GetCrossVarietyChartInfoDetailFromUniqueCode(chartInfo, myChartClassifyId, user.GetInfoByClaims(c))
+	case utils.CHART_SOURCE_RANGE_ANALYSIS:
+		resp, isOk, msg, errMsg = getRangeAnalysisChartInfoDetail(chartInfo, myChartClassifyId, user.GetInfoByClaims(c))
 	default:
 		msg := "错误的图表"
 		errMsg := "错误的图表"
@@ -1210,3 +1213,71 @@ func RefreshCorrelationChartInfo(c *gin.Context) {
 	}
 	response.OkData("刷新成功", "", c)
 }
+
+func getRangeAnalysisChartInfoDetail(chartInfo *chartInfoModel.ChartInfoView, myChartClassifyId int, userInfo user.UserInfo) (resp *chart_info.ChartInfoDetailResp, isOk bool, msg, errMsg string) {
+	resp = new(chart_info.ChartInfoDetailResp)
+	chartInfoId := chartInfo.ChartInfoId
+	//调用接口
+	chartData, e := services.GetRangeChartChartDetail(chartInfo.UniqueCode)
+	if e != nil {
+		msg = "获取失败"
+		errMsg = "获取图表信息失败, Err:" + e.Error()
+		return
+	}
+	chartDataResp := new(chart_info.ChartInfoDetailResp)
+	// 兼容返回值类型
+	chartDataString, _ := json.Marshal(chartData)
+	err := json.Unmarshal(chartDataString, chartDataResp)
+	if err != nil {
+		msg = "获取失败"
+		errMsg = "图表信息解析失败, Err:" + e.Error()
+		return
+	}
+	chartInfo = chartDataResp.ChartInfo
+	chartInfo.ChartInfoId = chartInfoId
+	yDataList := chartDataResp.YDataList
+	edbList := chartDataResp.EdbInfoList
+	xEdbIdValue := chartDataResp.XEdbIdValue
+	dataResp := chartDataResp.DataResp
+	// 访问记录-仅普通用户记录
+	ok, _, _ := user.GetAdminByUserInfo(userInfo)
+	if !ok {
+		go chart.SaveChartVisitLog(userInfo, chartInfo, myChartClassifyId)
+	}
+
+	// 用户是否有收藏该图表
+	{
+		ob := new(yb_my_chart.YbMyChart)
+		cond := `user_id = ? AND chart_info_id = ?`
+		pars := make([]interface{}, 0)
+		pars = append(pars, userInfo.UserID, chartInfo.ChartInfoId)
+		exists, e := ob.FetchByCondition(cond, pars)
+		if e != nil && e != utils.ErrNoRow {
+			msg = `操作失败`
+			errMsg = "获取用户图表失败, Err: " + e.Error()
+			return
+		}
+		myChartInfo := new(responseModel.MyChartItem)
+		if exists != nil && exists.MyChartID > 0 {
+			myChartInfo.MyChartID = exists.MyChartID
+			myChartInfo.MyChartClassifyID = exists.MyChartClassifyID
+			myChartInfo.ChartInfoID = exists.ChartInfoID
+			myChartInfo.ChartName = exists.ChartName
+			myChartInfo.UniqueCode = exists.UniqueCode
+			myChartInfo.ChartImage = exists.ChartImage
+			myChartInfo.UserID = exists.UserID
+			myChartInfo.ReportID = exists.ReportID
+			myChartInfo.ReportChapterID = exists.ReportChapterID
+			myChartInfo.CreateTime = utils.TimeTransferString(utils.FormatDateTime, exists.CreateTime)
+		}
+
+		resp.MyChartInfo = myChartInfo
+	}
+	resp.ChartInfo = chartInfo
+	resp.EdbInfoList = edbList
+	resp.XEdbIdValue = xEdbIdValue
+	resp.YDataList = yDataList
+	resp.DataResp = dataResp
+	isOk = true
+	return
+}

+ 25 - 0
controller/chart/chart_info.go

@@ -106,6 +106,31 @@ func GetChartInfoDetail(c *gin.Context) {
 		sourceArr = append(sourceArr, "平衡表")
 		dataResp = chartDataResp.DataResp
 
+	} else if chartInfo.Source == utils.CHART_SOURCE_RANGE_ANALYSIS {
+		//调用接口
+		chartData, e := services.GetRangeChartChartDetail(chartInfo.UniqueCode)
+		if e != nil {
+			response.FailMsg("获取失败", "获取图表信息失败, Err:"+e.Error(), c)
+			return
+		}
+		chartDataResp := new(chart_info.ChartInfoDetailResp)
+		// 兼容返回值类型
+		chartDataString, _ := json.Marshal(chartData)
+		err = json.Unmarshal(chartDataString, chartDataResp)
+		if err != nil {
+			response.FailMsg("获取失败", "获取图表信息失败, Err:"+err.Error(), c)
+			return
+		}
+		chartInfo = chartDataResp.ChartInfo
+		chartInfo.ChartInfoId = chartInfoId
+		yDataList = chartDataResp.YDataList
+		edbList = chartDataResp.EdbInfoList
+		xEdbIdValue = chartDataResp.XEdbIdValue
+		dataResp = chartDataResp.DataResp
+		// 图表的指标来源
+		sourceNameList, sourceNameEnList := chart.GetEdbSourceByEdbInfoIdList(edbList)
+		chartInfo.ChartSource = strings.Join(sourceNameList, ",")
+		chartInfo.ChartSourceEn = strings.Join(sourceNameEnList, ",")
 	} else {
 
 		// 获取主题样式

+ 2 - 0
init_serve/router.go

@@ -85,5 +85,7 @@ func InitRouter() (r *gin.Engine) {
 	routers.InitFeCalendar(r)
 	// 指标信息
 	routers.InitEdbInfo(r)
+	// 基本配置信息
+	routers.InitBaseConfig(r)
 	return
 }

+ 36 - 0
middleware/check_cygx_auth.go

@@ -0,0 +1,36 @@
+package middleware
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/services/company"
+	"hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/utils"
+)
+
+// CheckCygxAuth 如果带thirdCode就可以看,如果有权限也给其他权限
+func CheckCygxAuth() gin.HandlerFunc {
+
+	return func(c *gin.Context) {
+
+		userInfo := user.GetInfoByClaims(c)
+
+		thirdCodeEncrypt := c.Request.Header.Get("thirdCode")
+		thirdCode := utils.DesBase64Encrypt([]byte(thirdCodeEncrypt))
+		if string(thirdCode) == "" {
+			ok, checkInfo, _, err := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
+			if err != nil {
+				response.FailMsg("用户权限验证失败", "CheckBaseAuth-用户权限验证失败"+err.Error(), c)
+				c.Abort()
+				return
+			}
+			if !ok {
+				response.AuthError(checkInfo, "暂无权限", c)
+				c.Abort()
+				return
+			}
+		}
+
+		c.Next()
+	}
+}

+ 5 - 0
models/response/base_config.go

@@ -0,0 +1,5 @@
+package response
+
+type BusinessConfResp struct {
+	Disclaimer string `json:"disclaimer"`
+}

+ 19 - 0
models/tables/business_conf/business.conf.go

@@ -0,0 +1,19 @@
+package business_conf
+
+import (
+	"time"
+)
+
+type BusinessConf struct {
+	Id         int       `gorm:"column:id;primary_key;AUTO_INCREMENT;NOT NULL" json:"id"`
+	ConfKey    string    `gorm:"column:conf_key;default:;NOT NULL;comment:'配置Key'" json:"conf_key"`
+	ConfVal    string    `gorm:"column:conf_val;comment:'配置值'" json:"conf_val"`
+	ValType    int       `gorm:"column:val_type;default:0;NOT NULL;comment:'1-字符串;2-数值;3-数组;4-富文本;'" json:"val_type"`
+	Necessary  int       `gorm:"column:necessary;default:0;NOT NULL;comment:'是否必填:0-否;1-是'" json:"necessary"`
+	Remark     string    `gorm:"column:remark;default:;NOT NULL;comment:'备注'" json:"remark"`
+	CreateTime time.Time `gorm:"column:create_time;default:NULL;comment:'创建时间'" json:"create_time"`
+}
+
+func (b *BusinessConf) TableName() string {
+	return "business_conf"
+}

+ 10 - 0
models/tables/business_conf/query.go

@@ -0,0 +1,10 @@
+package business_conf
+
+import "hongze/hongze_yb/global"
+
+// GetItemByConfKey 获取配置项
+func (b *BusinessConf) GetItemByConfKey(key string) (item *BusinessConf, err error) {
+	sql := `SELECT * FROM business_conf WHERE conf_key = ? `
+	err = global.MYSQL["eta"].Raw(sql, key).First(&item).Error
+	return
+}

+ 3 - 0
models/tables/chart_edb_mapping/query.go

@@ -81,6 +81,9 @@ func (ct *ChartLibEdbInfoMappingTime) UnmarshalJSON(data []byte) error {
 	if s[0] == '"' {
 		s = s[1 : len(s)-1]
 	}
+	if s == "" {
+		return nil
+	}
 	t, err := time.ParseInLocation(utils.FormatDate, s, time.Local)
 	if err != nil {
 		return err

+ 11 - 0
routers/base_config.go

@@ -0,0 +1,11 @@
+package routers
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller"
+)
+
+func InitBaseConfig(r *gin.Engine) {
+	rGroupNotLogin := r.Group("api/base")
+	rGroupNotLogin.GET("/business_conf", controller.GetBusinessConf)
+}

+ 0 - 1
routers/report.go

@@ -27,5 +27,4 @@ func InitReport(r *gin.Engine) {
 	rGroup2.GET("/detail", report.ClassifyDetail)
 	rGroup2.GET("/detail/reports", report.ClassifyDetailReports)
 	rGroup2.GET("/menu/list", report.ClassifyMenuList)
-
 }

+ 1 - 1
routers/voice_broadcast.go

@@ -15,7 +15,7 @@ func InitVoiceBroadcast(r *gin.Engine) {
 	rGroup.GET("/delete", voice_broadcast.DelBroadcast)
 	rGroup.POST("/statistics/add", voice_broadcast.AddStatistics)
 	// 权限校验
-	rGroup2 := r.Group("api/voice/broadcast").Use(middleware.Token(), middleware.CheckBaseAuth())
+	rGroup2 := r.Group("api/voice/broadcast").Use(middleware.Token(), middleware.CheckCygxAuth())
 	rGroup2.POST("/list", voice_broadcast.BroadcastList)
 	rGroup2.GET("/detail", voice_broadcast.BroadcastDetail)
 	rGroup2.POST("/msg_send", voice_broadcast.MsgSend)

+ 34 - 0
services/base_config/business_conf.go

@@ -0,0 +1,34 @@
+package base_config
+
+import (
+	"context"
+	"fmt"
+	"hongze/hongze_yb/global"
+	"hongze/hongze_yb/models/tables/business_conf"
+	"hongze/hongze_yb/utils"
+	"html"
+	"time"
+)
+
+func GetBusinessConfDisclaimer() (disclaimer string, err error) {
+	cacheKey := utils.HONGZEYB_ + "business_conf:disclaimer"
+	disclaimer, _ = global.Redis.Get(context.TODO(), cacheKey).Result()
+	if disclaimer != "" {
+		disclaimer = html.UnescapeString(disclaimer)
+		return
+	}
+	obj := new(business_conf.BusinessConf)
+	item, err := obj.GetItemByConfKey("Disclaimer")
+	if err != nil {
+		err = fmt.Errorf("GetBusinessConfDisclaimer err:%v", err)
+		return
+	}
+	if item.Id <= 0 {
+		err = fmt.Errorf("研报声明未配置")
+		return
+	}
+	disclaimer = item.ConfVal
+	_ = global.Redis.Set(context.TODO(), cacheKey, disclaimer, 24*time.Hour)
+	disclaimer = html.UnescapeString(disclaimer)
+	return
+}

+ 19 - 0
services/eta_chart_lib.go

@@ -54,6 +54,25 @@ func GetBalanceChartDetail(uniqueCode string) (respData *chart_info.ChartLibChar
 	return
 }
 
+// GetRangeChartChartDetail 获取区间计算图表详情接口
+func GetRangeChartChartDetail(uniqueCode string) (respData *chart_info.ChartLibChartInfoDetailResp, err error) {
+	postUrl := fmt.Sprintf("%s/chart_auth/detail?UniqueCode=%s", global.CONFIG.EtaChartLib.ServerUrl, uniqueCode)
+	result, err := httpGet(postUrl)
+	if err != nil {
+		return
+	}
+	var resp ChartCommonDetailResp
+	if err = json.Unmarshal(result, &resp); err != nil {
+		return
+	}
+	if resp.Ret != 200 {
+		err = fmt.Errorf("%s,%s", resp.Msg, resp.ErrMsg)
+		return
+	}
+	respData = resp.Data
+	return
+}
+
 // post请求
 func httpPost(url, postData string, params ...string) ([]byte, error) {
 	body := ioutil.NopCloser(strings.NewReader(postData))

+ 6 - 0
utils/constants.go

@@ -120,6 +120,8 @@ const (
 	DATA_SOURCE_CALCULATE_ZDYFX                                 // 自定义分析->74
 	DATA_SOURCE_CALCULATE_RJZ                                   // 日均值计算->75
 	DATA_SOURCE_BUSINESS                             = 84       // 来源于自有数据
+	DATA_SOURCE_CALCULATE_RANGEANLYSIS               = 87       //区间计算->87
+	DATA_SOURCE_PREDICT_CALCULATE_RANGEANLYSIS       = 90       // 预测指标区间计算->90
 )
 
 const (
@@ -266,6 +268,9 @@ var SystemSourceList = []int{
 	DATA_SOURCE_CALCULATE_PERCENTILE,                 //百分位->68
 	DATA_SOURCE_PREDICT_CALCULATE_STANDARD_DEVIATION, //预测标准差->69
 	DATA_SOURCE_PREDICT_CALCULATE_PERCENTILE,         //预测百分位->70
+	DATA_SOURCE_CALCULATE_RANGEANLYSIS,               //区间计算->87
+	DATA_SOURCE_PREDICT_CALCULATE_RANGEANLYSIS,       // 预测指标区间计算->90
+
 }
 
 const (
@@ -298,6 +303,7 @@ const (
 	CHART_SOURCE_LINE_FEATURE_FREQUENCY          = 9  // 统计特征-频率分布图表
 	CHART_SOURCE_CROSS_HEDGING                   = 10 // 跨品种分析图表
 	CHART_SOURCE_BALANCE_EXCEL                   = 11 // 平衡表图表
+	CHART_SOURCE_RANGE_ANALYSIS                  = 12 // 	区间分析图表
 )
 
 // 图表类型