Explorar o código

Merge branch 'feature/yb11.0_road_video' into debug

# Conflicts:
#	services/report_push.go
xiexiaoyuan %!s(int64=2) %!d(string=hai) anos
pai
achega
c2e86e644b

+ 8 - 0
models/data_manage/cygx_article.go

@@ -58,3 +58,11 @@ func GetReportArticleList(condition string, pars []interface{}) (list []*CygxArt
 	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
+
+func GetYanXuanArticleIdList() (list *string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT GROUP_CONCAT(DISTINCT article_type_id  SEPARATOR ',') FROM  cygx_article_type `
+
+	err = o.Raw(sql).QueryRow(&list)
+	return
+}

+ 8 - 0
models/data_manage/edb_data_base.go

@@ -65,6 +65,14 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_coal"
 	case utils.DATA_SOURCE_GOOGLE_TRAVEL:
 		tableName = "edb_data_google_travel"
+	case utils.DATA_SOURCE_PREDICT_CALCULATE:
+		tableName = "edb_data_predict_calculate"
+	case utils.DATA_SOURCE_PREDICT_CALCULATE_TBZ:
+		tableName = "edb_data_predict_calculate_tbz"
+	case utils.DATA_SOURCE_PREDICT_CALCULATE_TCZ:
+		tableName = "edb_data_predict_calculate_tcz"
+	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL:
+		tableName = "edb_data_mysteel_chemical"
 	default:
 		tableName = ""
 		errors.New("无效的渠道:" + strconv.Itoa(source))

+ 35 - 0
models/yb/Road_video.go

@@ -0,0 +1,35 @@
+package yb
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// RoadVideo 路演视频
+type RoadVideo struct {
+	RoadVideoId int       `orm:"column(road_video_id);pk" description:"视频ID"`
+	Title            string    `description:"视频标题"`
+	CoverImgUrl      string    `description:"封面图地址"`
+	VideoUrl         string    `description:"视频地址"`
+	VideoSeconds     string    `description:"视频时长,单位秒"`
+	PublishState     int       `description:"发布状态:0-待发布 1-已发布"`
+	SendThsState     int       `description:"客群消息推送状态:0-待推送 1-已推送"`
+	IsDeleted        int       `description:"是否已删除 0-否 1-是"`
+	PublishTime      time.Time `description:"发布时间"`
+	SendThsTime      time.Time `description:"推送客群时间"`
+	CreateTime       time.Time `description:"提问时间"`
+	ModifyTime       time.Time `description:"修改时间"`
+	DeleteTime       time.Time `description:"删除时间"`
+}
+
+func (item *RoadVideo) TableName() string {
+	return "yb_road_video"
+}
+
+// GetRoadVideoById 主键获取视频
+func GetRoadVideoById(videoId int) (item *RoadVideo, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM yb_road_video WHERE road_video_id = ? AND is_deleted = 0 LIMIT 1`
+	err = o.Raw(sql, videoId).QueryRow(&item)
+	return
+}

+ 63 - 44
services/cygx_research_summary.go

@@ -389,51 +389,70 @@ func CygxResearchSummary(cont context.Context) (err error) {
 
 	//买方研选
 	{
+		ids, e := data_manage.GetYanXuanArticleIdList()
+		if e != nil {
+			err = e
+			fmt.Println("GetReportArticleList err:", e)
+			return
+		}
+
 		var condition string
 		var pars []interface{}
 		condition += ` AND publish_date < ?  AND publish_date >= ? `
 		pars = append(pars, friday, lastfriday)
 		mfyxList := make([]*data_manage.CygxArticle, 0)
 
-		//纪要
-		{
-			newCondition := condition + ` AND article_type_id = 1 `
-			list, e := data_manage.GetReportArticleList(newCondition, pars)
-			if e != nil {
-				err = e
-				fmt.Println("GetReportArticleList err:", e)
-				return
-			}
-			for _, article := range list {
-				mfyxList = append(mfyxList, article)
-			}
-		}
-		//观点
-		{
-			newCondition := condition + ` AND article_type_id = 2 `
-			list, e := data_manage.GetReportArticleList(newCondition, pars)
-			if e != nil {
-				err = e
-				fmt.Println("GetReportArticleList err:", e)
-				return
-			}
-			for _, article := range list {
-				mfyxList = append(mfyxList, article)
-			}
+		//9.23新增研选所有类型的报告都要
+		newCondition := condition + ` AND article_type_id IN (`+ *ids +`) `
+		list, e := data_manage.GetReportArticleList(newCondition, pars)
+		if e != nil {
+			err = e
+			fmt.Println("GetReportArticleList err:", e)
+			return
 		}
-		//沙龙
-		{
-			newCondition := condition + ` AND article_type_id = 13 `
-			list, e := data_manage.GetReportArticleList(newCondition, pars)
-			if e != nil {
-				err = e
-				fmt.Println("GetReportArticleList err:", e)
-				return
-			}
-			for _, article := range list {
-				mfyxList = append(mfyxList, article)
-			}
+		for _, article := range list {
+			mfyxList = append(mfyxList, article)
 		}
+
+		////纪要
+		//{
+		//	newCondition := condition + ` AND article_type_id = 1 `
+		//	list, e := data_manage.GetReportArticleList(newCondition, pars)
+		//	if e != nil {
+		//		err = e
+		//		fmt.Println("GetReportArticleList err:", e)
+		//		return
+		//	}
+		//	for _, article := range list {
+		//		mfyxList = append(mfyxList, article)
+		//	}
+		//}
+		////观点
+		//{
+		//	newCondition := condition + ` AND article_type_id = 2 `
+		//	list, e := data_manage.GetReportArticleList(newCondition, pars)
+		//	if e != nil {
+		//		err = e
+		//		fmt.Println("GetReportArticleList err:", e)
+		//		return
+		//	}
+		//	for _, article := range list {
+		//		mfyxList = append(mfyxList, article)
+		//	}
+		//}
+		////沙龙
+		//{
+		//	newCondition := condition + ` AND article_type_id = 13 `
+		//	list, e := data_manage.GetReportArticleList(newCondition, pars)
+		//	if e != nil {
+		//		err = e
+		//		fmt.Println("GetReportArticleList err:", e)
+		//		return
+		//	}
+		//	for _, article := range list {
+		//		mfyxList = append(mfyxList, article)
+		//	}
+		//}
 		var articleIdStr string
 		for _, v := range mfyxList {
 			articleIdStr += strconv.Itoa(v.ArticleId) + ","
@@ -474,8 +493,8 @@ func CygxResearchSummary(cont context.Context) (err error) {
 			//	}
 			//	company = "    <span style=\"color: #ff1720\">" + company + "</span>"
 			//}
-			if mapArticleSubject[article.ArticleId] != ""{
-				company = "    <span style=\"color: #ff1720\">"+"#"+mapArticleSubject[article.ArticleId]+"</span>"
+			if mapArticleSubject[article.ArticleId] != "" {
+				company = "    <span style=\"color: #ff1720\">" + "#" + mapArticleSubject[article.ArticleId] + "</span>"
 			}
 			var plus int
 			coreIndex := strings.Index(body, "核心观点:")
@@ -501,7 +520,7 @@ func CygxResearchSummary(cont context.Context) (err error) {
 				plus = 12
 			}
 			endIndex := strings.Index(body, "<hr")
-			fmt.Println("ID:",article.ArticleId)
+			fmt.Println("ID:", article.ArticleId)
 			fmt.Println("coreIndex:", coreIndex, endIndex)
 			if coreIndex != -1 && endIndex != -1 {
 				body = body[coreIndex+plus : endIndex]
@@ -882,8 +901,8 @@ func CygxLastWeekSummary(cont context.Context) (err error) {
 			//	}
 			//	company = "    <span style=\"color: #ff1720\">" + company + "</span>"
 			//}
-			if mapArticleSubject[article.ArticleId] != ""{
-				company = "    <span style=\"color: #ff1720\">"+"#"+mapArticleSubject[article.ArticleId]+"</span>"
+			if mapArticleSubject[article.ArticleId] != "" {
+				company = "    <span style=\"color: #ff1720\">" + "#" + mapArticleSubject[article.ArticleId] + "</span>"
 			}
 			var plus int
 			coreIndex := strings.Index(body, "核心观点:")
@@ -910,7 +929,7 @@ func CygxLastWeekSummary(cont context.Context) (err error) {
 			}
 			endIndex := strings.Index(body, "<hr")
 			if coreIndex != -1 && endIndex != -1 {
-				body = body[coreIndex+plus:endIndex]
+				body = body[coreIndex+plus : endIndex]
 				logItem := data_manage.CygxMinutesSummaryLog{
 					ArticleId:         int(articleId),
 					Type:              "YANX",
@@ -934,4 +953,4 @@ func CygxLastWeekSummary(cont context.Context) (err error) {
 	}
 
 	return
-}
+}

+ 2 - 0
services/data/base_edb_lib.go

@@ -100,6 +100,8 @@ func RefreshEdbData(edbInfoId, source int, edbCode, startDate string) (resp *mod
 		urlStr = "coal/refresh"
 	case utils.DATA_SOURCE_GOOGLE_TRAVEL:
 		urlStr = "google_travel/refresh"
+	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL:
+		urlStr = "mysteel_chemical/refresh"
 	}
 	if urlStr == "" {
 		err = fmt.Errorf(fmt.Sprint("source:", source, ";未实现该指标的刷新接口,请联系管理员"))

+ 62 - 0
services/data/edb_info.go

@@ -1681,3 +1681,65 @@ func RefreshDataFromGoogleTravel(wg *sync.WaitGroup) (err error) {
 	}
 	return err
 }
+
+// RefreshDataFromMysteelChemical 刷新钢联化工数据
+func RefreshDataFromMysteelChemical(wg *sync.WaitGroup) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromMysteelChemical Err:" + err.Error())
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromGl ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg("RefreshDataFromMysteelChemical ErrMsg:"+err.Error(), 3)
+		}
+		wg.Done()
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_MYSTEEL_CHEMICAL)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if err != nil {
+		return errors.New("GetEdbInfoByCondition:" + err.Error())
+	}
+
+	//var endDate string
+	//endDate = time.Now().AddDate(utils.DATA_END_DATE_LIMIT, 0, 0).Format(utils.FormatDateUnSpace)
+	for _, v := range items {
+		startDate := ""
+		if v.Frequency == "日度" {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		} else if v.Frequency == "周度" {
+			startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
+		} else if v.Frequency == "月度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "季度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "年度" {
+			startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
+		} else {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		}
+		//fmt.Println(startDate, endDate)
+		//err = data_manage.RefreshEdbDataByGl(v.EdbInfoId, v.EdbCode, startDate, endDate)
+		//if err != nil {
+		//	return errors.New("RefreshEdbDataByGl:" + err.Error())
+		//}
+		resp, err := RefreshEdbData(v.EdbInfoId, v.Source, v.EdbCode, startDate)
+		if err != nil {
+			return errors.New("RefreshEdbData Err:" + err.Error())
+		}
+		if resp.Ret != 200 {
+			return errors.New("RefreshEdbData Err:" + resp.Msg + ";ErrMsg:" + resp.ErrMsg)
+		}
+		//item, err := data_manage.GetEdbInfoMaxAndMinInfo(v.Source, v.EdbCode)
+		//if err != nil {
+		//	return err
+		//}
+		//if item != nil {
+		//	err = data_manage.ModifyEdbInfoMaxAndMinInfo(v.EdbInfoId, item)
+		//	if err != nil {
+		//		return err
+		//	}
+		//}
+	}
+	return err
+}

+ 27 - 0
services/report_push.go

@@ -177,6 +177,11 @@ func SendToThs(sendDetailId, reportId int, reportType string) (err error) {
 		if tmpErr != nil {
 			err = tmpErr
 		}
+	case "研报线上路演":
+		tmpErr := SendYbRoadVideoToThs(reportId)
+		if tmpErr != nil {
+			err = tmpErr
+		}
 	case "语音播报":
 		tmpErr := SendYbVoiceBroadcastToThs(reportId)
 		if tmpErr != nil {
@@ -538,6 +543,28 @@ func SendYbCommunityVideoToThs(videoId int) (err error) {
 	return
 }
 
+// SendYbRoadVideoToThs 推送研报路演视频客群消息
+func SendYbRoadVideoToThs(videoId int) (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("SendYbRoadVideoToThs-延时任务发送报告至同花顺失败, RoadVideoId:"+strconv.Itoa(videoId)+", ErrMsg:"+err.Error(), 3)
+		}
+	}()
+	video, e := yb.GetRoadVideoById(videoId)
+	if e != nil {
+		err = errors.New("获取视频信息失败, Err:" + e.Error())
+		return
+	}
+	permissionName := "宏观" // 所有客群都推
+	title := video.Title
+	jumpUrl := fmt.Sprint(utils.WxYbAppId+`/pages/roadShowVideo/videoList?videoId=`, videoId)
+	logoUrl := `https://hongze.oss-cn-shanghai.aliyuncs.com/hzyj.png`
+	// 推送至同花顺
+	dataType := "2"
+	err = SendThs(title, permissionName, title, jumpUrl, logoUrl, dataType)
+	return
+}
+
 // SendYbVoiceBroadcastToThs 推送研报小程序语音播报客群消息
 func SendYbVoiceBroadcastToThs(voiceId int) (err error) {
 	defer func() {

+ 3 - 1
services/task.go

@@ -236,7 +236,7 @@ func OneMinute(cont context.Context) (err error) {
 
 func RefreshData(cont context.Context) (err error) {
 	wg := sync.WaitGroup{}
-	wg.Add(11)
+	wg.Add(12)
 	//hour := time.Now().Hour()
 	//if hour != 0 {
 	//}
@@ -261,6 +261,8 @@ func RefreshData(cont context.Context) (err error) {
 	go data.RefreshDataFromCoal(&wg)
 	//谷歌出行数据
 	go data.RefreshDataFromGoogleTravel(&wg)
+	//钢联化工
+	go data.RefreshDataFromMysteelChemical(&wg)
 
 	wg.Wait()
 	////计算指标

+ 34 - 29
utils/constants.go

@@ -64,35 +64,40 @@ const (
 
 //数据来源渠道
 const (
-	DATA_SOURCE_THS                  = iota + 1 //同花顺
-	DATA_SOURCE_WIND                            //wind
-	DATA_SOURCE_PB                              //彭博
-	DATA_SOURCE_CALCULATE                       //计算指标
-	DATA_SOURCE_CALCULATE_LJZZY                 //累计值转月
-	DATA_SOURCE_CALCULATE_TBZ                   //同比值
-	DATA_SOURCE_CALCULATE_TCZ                   //同差值
-	DATA_SOURCE_CALCULATE_NSZYDPJJS             //N数值移动平均计算
-	DATA_SOURCE_MANUAL                          //手工指标
-	DATA_SOURCE_LZ                              //隆众
-	DATA_SOURCE_YS                              //有色
-	DATA_SOURCE_CALCULATE_HBZ                   //环比值->12
-	DATA_SOURCE_CALCULATE_HCZ                   //环差值->13
-	DATA_SOURCE_CALCULATE_BP                    //变频->14
-	DATA_SOURCE_GL                              //钢联->15
-	DATA_SOURCE_ZZ                              //郑商所->16
-	DATA_SOURCE_DL                              //大商所->17
-	DATA_SOURCE_SH                              //上期所->18
-	DATA_SOURCE_CFFEX                           //中金所->19
-	DATA_SOURCE_SHFE                            //上期能源->20
-	DATA_SOURCE_GIE                             //欧洲天然气->21
-	DATA_SOURCE_CALCULATE_TIME_SHIFT            //时间移位->22
-	DATA_SOURCE_CALCULATE_ZJPJ                  //直接拼接->23
-	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
-	DATA_SOURCE_LT                              //路透->25
-	DATA_SOURCE_COAL                            //煤炭网->26
-	DATA_SOURCE_PYTHON                          //python代码->27
-	DATA_SOURCE_PB_FINANCE                      //彭博财务数据->28
-	DATA_SOURCE_GOOGLE_TRAVEL                   //谷歌出行->29
+	DATA_SOURCE_THS                   = iota + 1 //同花顺
+	DATA_SOURCE_WIND                             //wind
+	DATA_SOURCE_PB                               //彭博
+	DATA_SOURCE_CALCULATE                        //计算指标
+	DATA_SOURCE_CALCULATE_LJZZY                  //累计值转月
+	DATA_SOURCE_CALCULATE_TBZ                    //同比值
+	DATA_SOURCE_CALCULATE_TCZ                    //同差值
+	DATA_SOURCE_CALCULATE_NSZYDPJJS              //N数值移动平均计算
+	DATA_SOURCE_MANUAL                           //手工指标
+	DATA_SOURCE_LZ                               //隆众
+	DATA_SOURCE_YS                               //有色
+	DATA_SOURCE_CALCULATE_HBZ                    //环比值->12
+	DATA_SOURCE_CALCULATE_HCZ                    //环差值->13
+	DATA_SOURCE_CALCULATE_BP                     //变频->14
+	DATA_SOURCE_GL                               //钢联->15
+	DATA_SOURCE_ZZ                               //郑商所->16
+	DATA_SOURCE_DL                               //大商所->17
+	DATA_SOURCE_SH                               //上期所->18
+	DATA_SOURCE_CFFEX                            //中金所->19
+	DATA_SOURCE_SHFE                             //上期能源->20
+	DATA_SOURCE_GIE                              //欧洲天然气->21
+	DATA_SOURCE_CALCULATE_TIME_SHIFT             //时间移位->22
+	DATA_SOURCE_CALCULATE_ZJPJ                   //直接拼接->23
+	DATA_SOURCE_CALCULATE_LJZTBPJ                //累计值同比拼接->24
+	DATA_SOURCE_LT                               //路透->25
+	DATA_SOURCE_COAL                             //煤炭网->26
+	DATA_SOURCE_PYTHON                           //python代码->27
+	DATA_SOURCE_PB_FINANCE                       //彭博财务数据->28
+	DATA_SOURCE_GOOGLE_TRAVEL                    //谷歌出行->29
+	DATA_SOURCE_PREDICT                          //普通预测指标->30
+	DATA_SOURCE_PREDICT_CALCULATE                //预测指标运算->31
+	DATA_SOURCE_PREDICT_CALCULATE_TBZ            //预测指标同比值->32
+	DATA_SOURCE_PREDICT_CALCULATE_TCZ            //预测指标同差值->33
+	DATA_SOURCE_MYSTEEL_CHEMICAL                 //钢联化工->34
 )
 
 //http://datawind.hzinsights.com:8040/hz_server