Browse Source

导入固收研究历史报告

xyxie 5 days ago
parent
commit
0cdb1d694b
3 changed files with 115 additions and 15 deletions
  1. 1 0
      main.go
  2. 15 1
      models/report_rai.go
  3. 99 14
      services/report_rai.go

+ 1 - 0
main.go

@@ -25,6 +25,7 @@ func main() {
 	}
 
 	go services.Task()
+	//services.RaiReportInit()
 
 	// 异常处理
 	web.ErrorController(&controllers.ErrorController{})

+ 15 - 1
models/report_rai.go

@@ -101,4 +101,18 @@ func GetReportByRaiReportId(raiReportId int) (report *Report, err error) {
 	report = new(Report)
 	err = global.DbMap[utils.DbNameReport].Model(&Report{}).Where("rai_report_id = ?", raiReportId).First(report).Error
 	return
-}
+}
+
+type RaiArticleListResultApi struct {
+	Data []ArticleResultApidate `json:"data"`
+	Code int                  `json:"code"`
+	Msg  string               `json:"msg"`
+	Pagination Pagination `json:"pagination"`
+}
+
+type Pagination struct {
+	Total int `json:"total"`
+	Page  int `json:"page"`
+	PageSize  int `json:"page_size"`
+	PageTotal int `json:"page_total"`
+}

+ 99 - 14
services/report_rai.go

@@ -35,28 +35,19 @@ func AutoInsertRaiReport() {
 
 func HandleInsertRaiReport(raiReportId int) (err error) {
 	// 设置缓存,防止重复处理
-	cacheKey := fmt.Sprintf("rai_report_notify_redis_%d", raiReportId)
-	cacheValue := utils.Rc.GetStr(cacheKey)
-	if cacheValue != "" {
-		return nil
-	}
-	utils.Rc.SetNX(cacheKey, "1", 10*time.Second)
 	defer func() {
 		if err != nil {
 			msg := fmt.Sprintf("处理同步过来的文章失败"+"HandleArticleListByApi ErrMsg:%s artcleId:%d", err.Error(), raiReportId)
 			utils.FileLog.Info(msg, 2)
 			go alarm_msg.SendAlarmMsg(msg, 2)
 		}
-		utils.Rc.Delete(cacheKey)
 	}()
-	var clueApiUrl string
-	clueApiUrl = fmt.Sprint(utils.RaiReportLibUrl, "articles/", raiReportId)
-	fmt.Println(clueApiUrl)
 
-	body, err := getRaiReportLib(clueApiUrl)
+	body, err := getRaiReportLib(fmt.Sprintf("%s/articles/%d", utils.RaiReportLibUrl, raiReportId))
 	if err != nil {
 		fmt.Println(err)
-		return
+		err = fmt.Errorf("获取权益报告失败, Err: %s", err.Error())
+		return 
 	}
 	var articleResultDate models.ArticleDetailResultApi
 	err = json.Unmarshal(body, &articleResultDate)
@@ -66,6 +57,49 @@ func HandleInsertRaiReport(raiReportId int) (err error) {
 	}
 	
 	articleResult := articleResultDate.Data
+	err = handleInsertRaiReport(articleResult)
+	if err != nil {
+		return err
+	}
+
+	return
+}
+
+func handleInsertRaiReport(articleResult models.ArticleResultApidate) (err error) {
+	raiReportId := articleResult.ArticleId
+	// 设置缓存,防止重复处理
+	cacheKey := fmt.Sprintf("rai_report_notify_redis_%d", raiReportId)
+	cacheValue := utils.Rc.GetStr(cacheKey)
+	if cacheValue != "" {
+		return nil
+	}
+	utils.Rc.SetNX(cacheKey, "1", 10*time.Second)
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("处理同步过来的文章失败"+"HandleArticleListByApi ErrMsg:%s artcleId:%d", err.Error(), raiReportId)
+			utils.FileLog.Info(msg, 2)
+			go alarm_msg.SendAlarmMsg(msg, 2)
+		}
+		utils.Rc.Delete(cacheKey)
+	}()
+	// var clueApiUrl string
+	// clueApiUrl = fmt.Sprint(utils.RaiReportLibUrl, "articles/", raiReportId)
+	// fmt.Println(clueApiUrl)
+
+	// body, err := getRaiReportLib(clueApiUrl)
+	// if err != nil {
+	// 	fmt.Println(err)
+	// 	err = fmt.Errorf("获取权益报告失败, Err: %s", err.Error())
+	// 	return 
+	// }
+	// var articleResultDate models.ArticleDetailResultApi
+	// err = json.Unmarshal(body, &articleResultDate)
+	// if err != nil {
+	// 	fmt.Println("Getres.PublicGetDate Err:", err.Error())
+	// 	return err
+	// }
+	
+	// articleResult := articleResultDate.Data
 	// 判断是否是固收研究
 	if articleResult.IndustrId != 12 {
 		return nil
@@ -125,7 +159,7 @@ func HandleInsertRaiReport(raiReportId int) (err error) {
 			// 报告状态为未发布,则更新报告
 			state = models.ReportStatePublished
 			reportInfo.PublishTime = articleResult.PublishDate
-		}else if articleResult.IsActive == false {
+		}else if !articleResult.IsActive {
 			// 删除报告
 			err = models.DeleteReport(reportInfo.Id)
 			if err != nil {
@@ -303,4 +337,55 @@ func getRaiReportLib(url string) (body []byte, err error) {
 		return
 	}
 	return
-}
+}
+
+// 导入固收研究的历史报告,前提是需要确认报告的分类都已经建好,并且已绑定固定收益品种
+func RaiReportInit() (err error) {
+	fmt.Println("开始导入固收研究的历史报告")
+	defer func() {
+		if err != nil {
+			msg := fmt.Sprintf("导入固收研究的历史报告失败, Err: %s", err.Error())
+			fmt.Println(msg)
+			go alarm_msg.SendAlarmMsg(msg, 2)
+		}
+	}()
+	// 分页调用接口获取历史报告
+	totalPage := 1
+	pageSize := 10
+	successCount := 0
+	failCount := 0
+	for i := 0; i <= totalPage; i++ {
+		pageindex := i*pageSize 
+		body, er := getRaiReportLib(fmt.Sprintf("%s/articles/mp?take=%d&skip=%d&publish_status=2&industry_id=12", utils.RaiReportLibUrl, pageSize, pageindex))
+		if er != nil {
+			err = fmt.Errorf("获取权益报告失败, Err: %s", er.Error())
+			return 
+		}
+		// 解析内容,获取真实的分页总数
+		var articleResultDate models.RaiArticleListResultApi
+		err = json.Unmarshal(body, &articleResultDate)
+		if err != nil {
+			err = fmt.Errorf("获取权益报告失败json解析失败, Err: %s", err.Error())
+			return
+		}
+		if articleResultDate.Code != 0 {
+			err = fmt.Errorf("获取权益报告失败, Err: %s", articleResultDate.Msg)
+			return
+		}
+		totalPage = articleResultDate.Pagination.PageTotal
+		articleResultList := articleResultDate.Data
+		for _, articleResult := range articleResultList {
+			err = handleInsertRaiReport(articleResult)
+			if err != nil {
+				fmt.Printf("导入固收研究的历史报告失败%d, Err: %s\n", articleResult.ArticleId, err.Error())
+				failCount++
+				continue
+			}else {
+				fmt.Printf("导入固收研究的历史报告成功%d\n", articleResult.ArticleId)
+				successCount++
+			}
+		}
+	}
+	fmt.Printf("导入固收研究的历史报告完成,成功%d,失败%d\n", successCount, failCount)
+	return nil
+}