Browse Source

一期研报

kobe6258 7 months ago
parent
commit
7a7339dc75

+ 1 - 1
controllers/report/report_controller.go

@@ -74,7 +74,7 @@ func (r *ReportController) List(permissionIds string) {
 			err = exception.New(exception.QueryReportPageFailed)
 			return
 		}
-		var reportOrgIds []int
+		var reportOrgIds map[string][]int
 		if r.PageInfo.LatestId == 0 {
 			pageRes.Total, pageRes.LatestId, reportOrgIds = report.GetTotalPageCountByPermissionIds(permissionIdList)
 			r.PageInfo.LatestId = pageRes.LatestId

+ 4 - 0
domian/report/eta_report_service.go

@@ -3,6 +3,7 @@ package report
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/models/eta"
+	"eta/eta_mini_ht_api/models/ht"
 	"fmt"
 	"html"
 	"sync"
@@ -53,6 +54,9 @@ func GetETAReportIdsByPermissionIds(permissionIds []int) (ids []int, err error)
 	return eta.GetETAReportIdsByClassifyIds(classifyIds)
 }
 
+func GetHtReport(id int) (pdf string, err error) {
+	return ht.GetPDFUrl(id)
+}
 func GetETAReport(id int) (detail ETAReportDTO, err error) {
 	report, err := eta.GetETAReportById(id)
 	if err != nil {

+ 2 - 22
domian/report/ht_report_service.go

@@ -2,37 +2,17 @@ package report
 
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
-	htDao "eta/eta_mini_ht_api/models/ht"
-	"eta/eta_mini_ht_api/models/report"
+	reportDao "eta/eta_mini_ht_api/models/report"
 )
 
 func GetHTReportIdsByPermissionIds(permissionIds []int) (ids []int, err error) {
 	//品种名字筛选
-	var query []htDao.HtQuery
 	permissionNames, err := GetPermissionNamesByPermissionIds(permissionIds)
 	if err != nil {
 		logger.Error("获取品种名称列表失败:%v", err)
 		return
 	}
-	//获取板块列表组成查询条件 通过板块和品种筛选海通的研报
-	for _, permissionName := range permissionNames {
-		query = append(query, htDao.HtQuery{
-			Plate:      GetPlateNameByPermissionName(permissionName),
-			Permission: permissionName,
-		})
-	}
 	//更具query查询ids TODO
-	ids, err = htDao.GetHTReportIdsByPermissionIds(query)
-	return
-}
-
-func GetPlateNameByPermissionName(permissionName string) (plate string) {
-	//板块名字筛选
-	plate, err := report.GetPlateByPermissionName(permissionName)
-	if err != nil {
-		logger.Error("获取板块id失败:%v", err)
-		return ""
-	}
-	//获取板块列表组成查询条件 通过板块和品种筛选海通的研报
+	ids, err = reportDao.GetIdsByPlateNames(permissionNames)
 	return
 }

+ 28 - 11
domian/report/report_service.go

@@ -69,6 +69,7 @@ type ReportDTO struct {
 	PermissionNames  interface{}     `json:"permissionNames,omitempty"`
 	Highlight        []string        `json:"highlight,omitempty"`
 	Detail           json.RawMessage `json:"detail,omitempty"`
+	PdfUrl           string          `json:"pdfUrl,omitempty"`
 	CoverSrc         int             `json:"-"`
 	CoverUrl         string          `json:"coverUrl"`
 }
@@ -178,7 +179,7 @@ func GetReportPageByAnalyst(pageInfo page.PageInfo, analyst string) (list []Repo
 	}
 	return
 }
-func GetReportPageByOrgIds(pageInfo page.PageInfo, orgIds []int) (list []ReportDTO, err error) {
+func GetReportPageByOrgIds(pageInfo page.PageInfo, orgIds map[string][]int) (list []ReportDTO, err error) {
 	offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
 	reports, err := reportDao.GetReportPageByOrgIds(pageInfo.LatestId, pageInfo.PageSize, offset, orgIds)
 	if err != nil {
@@ -394,8 +395,8 @@ func syncES(reports []reportDao.Report) (err error) {
 	}
 	return
 }
-func InitHTReportList(list []ht.HTReport) (err error) {
-	logger.Info("同步研报数量%d", len(list))
+func InitHTReportList(list []ht.HTReport) (noRecord bool, err error) {
+
 	var reports []reportDao.Report
 	//获取系统中ht品种名
 	permissions, err := reportDao.GetGLAuthorNames()
@@ -435,17 +436,23 @@ func InitHTReportList(list []ht.HTReport) (err error) {
 						coverSrc = ids[randomIndex]
 					}
 					destRp.CoverSrc = coverSrc
+					destRp.PlateName = htRp.PermissionName
 					reports = append(reports, destRp)
 				}
 			}
 		}
 	}
-	err = reportDao.BatchInsertReport(&reports)
-	if err != nil {
-		logger.Error("同步HT研报失败:%v", err)
-		return
+	if len(reports) == 0 {
+		return true, nil
+	} else {
+		logger.Info("同步研报数量%d", len(reports))
+		err = reportDao.BatchInsertReport(&reports)
+		if err != nil {
+			logger.Error("同步HT研报失败:%v", err)
+			return false, err
+		}
+		return false, syncES(reports)
 	}
-	return syncES(reports)
 }
 func SyncHTReportList(list []ht.HTReport) (err error) {
 	//logger.Info("同步研报数量%d", len(list))
@@ -505,8 +512,7 @@ func GetListByCondition[T any](column string, ids []T) (dtoList []ReportDTO, err
 	return
 }
 
-func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestId int64, ids []int) {
-	//TODO 一期品种筛选reportIds
+func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestId int64, ids map[string][]int) {
 	htIds, err := GetHTReportIdsByPermissionIds(permissionIds)
 	if err != nil {
 		logger.Error("品种筛选ht报告id失败:%v", err)
@@ -518,7 +524,18 @@ func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestI
 		etaIds = []int{}
 	}
 	total = int64(len(etaIds) + len(htIds))
-	ids = append(etaIds, htIds...)
+	ids = make(map[string][]int, 2)
+	if len(etaIds) == 0 {
+		ids["ETA"] = []int{}
+	} else {
+		ids["ETA"] = etaIds
+	}
+	if len(htIds) == 0 {
+		ids["HT"] = []int{}
+	} else {
+		ids["HT"] = htIds
+	}
+	//ids = append(etaIds, htIds...)
 	latestId = reportDao.GetMaxIdByPermissionIds(ids)
 	return
 }

+ 28 - 28
main.go

@@ -59,41 +59,41 @@ func initReport() {
 	}()
 	go func() {
 		defer wg.Done()
-		id, err := report.GetHTLatestReportId()
-		var htReportList []ht.HTReport
-		htReportList, err = ht.GetHTReports(id)
-		if err != nil {
-			logger.Error("获取ETA研报列表失败:%v", err)
-		}
-		for i := 0; i < len(htReportList); i++ {
-			timestamp := int64(htReportList[i].PublishTime)
-			t := time.UnixMilli(timestamp)
-			htReportList[i].PublishedTime = t.Format(time.DateTime)
-			plateId := htReportList[i].PlateId
-			plate, err := ht.GetPermissionNameById(plateId)
-			if err != nil || plate.ParentId == 0 {
-				htReportList[i].PermissionName = htReportList[i].PlateName
-			} else {
-				PermissionName, err := getPermissionNameById(plate.ParentId)
-				if err != nil {
-					logger.Error("获取ETA研报列表失败:%v", err)
-					htReportList[i].PermissionName = ""
+		for {
+			id, err := report.GetHTLatestReportId()
+			var htReportList []ht.HTReport
+			htReportList, err = ht.GetHTReports(id)
+			if err != nil {
+				logger.Error("获取ETA研报列表失败:%v", err)
+			}
+			for i := 0; i < len(htReportList); i++ {
+				timestamp := int64(htReportList[i].PublishTime)
+				t := time.UnixMilli(timestamp)
+				htReportList[i].PublishedTime = t.Format(time.DateTime)
+				plateId := htReportList[i].PlateId
+				plate, err := ht.GetPermissionNameById(plateId)
+				if err != nil || plate.ParentId == 0 {
+					htReportList[i].PermissionName = htReportList[i].PlateName
 				} else {
-					htReportList[i].PermissionName = PermissionName
+					PermissionName, err := getPermissionNameById(plate.ParentId)
+					if err != nil {
+						logger.Error("获取ETA研报列表失败:%v", err)
+						htReportList[i].PermissionName = ""
+					} else {
+						htReportList[i].PermissionName = PermissionName
+					}
 				}
 			}
-		}
-		x := len(htReportList)
-		if x > 0 {
-			logger.Info(contants.TaskFormat, "同步ETA研报库结束")
-		}
-		if len(htReportList) > 0 {
-			err = report.InitHTReportList(htReportList)
+			stop, err := report.InitHTReportList(htReportList)
 			if err != nil {
 				logger.Error("同步ETA研报列表失败:%v", err)
+				break
+			}
+			if stop {
+				logger.Info(contants.TaskFormat, "同步HT研报库结束")
+				break
 			}
 		}
-		logger.Info(contants.TaskFormat, "同步ETA研报库结束")
 	}()
 	wg.Wait()
 	logger.Info("初始化研报库完成")

+ 1 - 1
models/eta/eta_permission.go

@@ -36,7 +36,7 @@ func GetPermissionNamesByClassifyID(ids []int) (chartPermissionNames []string, e
 	return
 }
 func GetPermissionNamesByPermissionIds(ids []int) (chartPermissionNames []string, err error) {
-	sql := "select chart_permission_id, permission_name from chart_permission WHERE chart_permission_id in ?"
+	sql := "select permission_name from chart_permission WHERE chart_permission_id in ?"
 	err = doSql(sql, &chartPermissionNames, ids)
 	return
 }

+ 7 - 0
models/ht/ht_report.go

@@ -20,6 +20,13 @@ func GetHTReports(id int) (reports []HTReport, err error) {
 	return
 }
 
+func GetPDFUrl(id int) (url string, err error) {
+	db := models.HT()
+	sql := "select report_file_path from t_iirp_report_info where id=?"
+	err = db.Model(&HTReport{}).Raw(sql, id).Scan(&url).Error
+	return
+}
+
 type HtQuery struct {
 	Plate      string
 	Permission string

+ 1 - 13
models/report/gl_report_author_mappings.go

@@ -10,18 +10,6 @@ type GLReportAuthorMapping struct {
 
 func GetGLAuthorNames() (mappingList []GLReportAuthorMapping, err error) {
 	db := models.Main()
-	err = db.Model(&GLReportAuthorMapping{}).Select("author_names").Find(&mappingList).Error
-	return
-}
-
-func GetPlateByPermissionName(permissionName string) (plate string, err error) {
-	var plates []string
-	db := models.Main()
-	err = db.Model(&GLReportAuthorMapping{}).Select("distinct plate").Where("permission = ?", permissionName).Scan(&plates).Error
-	if err != nil {
-		plate = ""
-		return
-	}
-	plate = plates[0]
+	err = db.Model(&GLReportAuthorMapping{}).Select("*").Find(&mappingList).Error
 	return
 }

+ 43 - 5
models/report/report.go

@@ -34,6 +34,7 @@ type Report struct {
 	Source        ReportSource `gorm:"column:source;comment:'研报来源1:eta 2:海通'" json:"source"`
 	Title         string       `gorm:"column:title;comment:'标题'" json:"title"`
 	Abstract      string       `gorm:"column:abstract;comment:'摘要'" json:"abstract"`
+	PlateName     string       `gorm:"column:plate_name;comment:'板块'" json:"plate_name"`
 	Author        string       `gorm:"column:author;comment:'作者'" json:"author"`
 	CoverSrc      int          `gorm:"column:cover_src;comment:'封面图片'" json:"cover_src"`
 	Status        ReportStatus `gorm:"column:status;comment:'报告状态 init:初始化 pending:同步中 done:完成同步'" json:"status"`
@@ -43,6 +44,11 @@ type Report struct {
 	UpdatedTime   time.Time    `gorm:"column:updated_time;comment:'修改时间'" json:"updated_time"`
 }
 
+func GetIdsByPlateNames(plateName []string) (ids []int, err error) {
+	db := models.Main()
+	err = db.Model(&Report{}).Select("distinct org_id").Where(" source ='HT' and plate_name in ?  ", plateName).Scan(&ids).Error
+	return
+}
 func BatchInsertReport(list *[]Report) (err error) {
 	db := models.Main()
 	//手动事务
@@ -128,9 +134,33 @@ func GetListByCondition[T any](column string, values []T) (reports []Report, err
 	}
 	return
 }
-func GetMaxIdByPermissionIds(orgIds []int) (maxId int64) {
+func GetMaxIdByPermissionIds(orgIds map[string][]int) (maxId int64) {
 	db := models.Main()
-	err := db.Model(&Report{}).Select("MAX(id) id").Where("org_id in ?", orgIds).Scan(&maxId).Error
+	if len(orgIds["ETA"]) == 0 && len(orgIds["HT"]) == 0 {
+		err := db.Model(&Report{}).Select("MAX(id) id").Scan(&maxId).Error
+		if err != nil {
+			logger.Error("获取报告最大ID失败:%v", err)
+			return 0
+		}
+		return
+	}
+	if len(orgIds["ETA"]) == 0 {
+		err := db.Model(&Report{}).Select("MAX(id) id").Where(" source='HT' and org_id in ?", orgIds["HT"]).Scan(&maxId).Error
+		if err != nil {
+			logger.Error("获取报告最大ID失败:%v", err)
+			return 0
+		}
+		return
+	}
+	if len(orgIds["HT"]) == 0 {
+		err := db.Model(&Report{}).Select("MAX(id) id").Where(" source='ETA' and org_id in ?", orgIds["ETA"]).Scan(&maxId).Error
+		if err != nil {
+			logger.Error("获取报告最大ID失败:%v", err)
+			return 0
+		}
+		return
+	}
+	err := db.Model(&Report{}).Select("MAX(id) id").Where(" source='ETA' and org_id in ?", orgIds["ETA"]).Or("source='HT' and org_id in ?", orgIds["HT"]).Scan(&maxId).Error
 	if err != nil {
 		logger.Error("获取报告最大ID失败:%v", err)
 		return 0
@@ -173,8 +203,8 @@ func GetReportPage(latestId int64, limit int, offset int) (list []Report, err er
 	return
 }
 
-func GetReportPageByOrgIds(latestId int64, limit int, offset int, orgIds []int) (list []Report, err error) {
-	if len(orgIds) == 0 {
+func GetReportPageByOrgIds(latestId int64, limit int, offset int, orgIds map[string][]int) (list []Report, err error) {
+	if len(orgIds["ETA"]) == 0 && len(orgIds["HT"]) == 0 {
 		return GetReportPage(latestId, limit, offset)
 	}
 	if latestId < 0 {
@@ -187,7 +217,15 @@ func GetReportPageByOrgIds(latestId int64, limit int, offset int, orgIds []int)
 		logger.Error("非法的limit参数:%d", limit)
 	}
 	db := models.Main()
-	err = db.Select(CommonColumns).Where("id<= ? and org_id in ?", latestId, orgIds).Order("published_time desc").Limit(limit).Offset(offset).Find(&list).Error
+	if len(orgIds["ETA"]) == 0 {
+		err = db.Select(CommonColumns).Where("id<= ?", latestId).Where(" source='HT' and org_id in ?", orgIds["HT"]).Order("published_time desc").Limit(limit).Offset(offset).Find(&list).Error
+		return
+	}
+	if len(orgIds["HT"]) == 0 {
+		err = db.Select(CommonColumns).Where("id<= ?", latestId).Where("source='ETA' and org_id in ?", orgIds["ETA"]).Order("published_time desc").Limit(limit).Offset(offset).Find(&list).Error
+		return
+	}
+	err = db.Select(CommonColumns).Where("id<= ?", latestId).Where("(source='ETA' and org_id in ? ) or (source='HT' and org_id in ?) ", orgIds["ETA"], orgIds["HT"]).Order("published_time desc").Limit(limit).Offset(offset).Find(&list).Error
 	return
 }
 

+ 1 - 2
routers/router.go

@@ -4,7 +4,6 @@ import (
 	"eta/eta_mini_ht_api/controllers/media"
 	"eta/eta_mini_ht_api/controllers/report"
 	"eta/eta_mini_ht_api/controllers/user"
-	"eta/eta_mini_ht_api/middleware"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/filter/cors"
 	"time"
@@ -20,7 +19,7 @@ func init() {
 		MaxAge:           12 * time.Hour,
 	}))
 	//增加授权拦截
-	web.InsertFilter("*", web.BeforeRouter, middleware.AuthMiddleware())
+	//web.InsertFilter("*", web.BeforeRouter, middleware.AuthMiddleware())
 
 	ns := web.NewNamespace("/htapi",
 		web.NSNamespace("/user",

+ 27 - 16
service/report/report_service.go

@@ -66,44 +66,55 @@ func GetReportById(reportId int) (report reportService.ReportDTO, err error) {
 		return
 	}
 	var detail interface{}
+	var pdfUrl string
 	switch report.Source {
 	case SourceETA:
 		detail, err = getETAReportDetail(&report)
 		if err != nil {
-			return reportService.ReportDTO{}, err
+			logger.Error("获取研报详情失败失败:%v")
+			err = exception.New(exception.GetReportFailed)
+			return
+		}
+		var jsonStr []byte
+		jsonStr, err = json.Marshal(detail)
+		if err != nil {
+			logger.Error("生成研报详情失败:%v", err)
+			err = exception.New(exception.GetReportFailed)
 		}
+		report.Detail = jsonStr
+		return
 	case SourceHT:
-		//TODO
-		detail = nil
+		pdfUrl, err = getHTReportDetail(&report)
+		if err != nil {
+			logger.Error("获取研报详情失败失败:%v")
+			err = exception.New(exception.GetReportFailed)
+			return
+		}
+		report.PdfUrl = pdfUrl
 		return
-	}
-	if err != nil {
-		logger.Error("获取研报详情失败失败:%v")
+	default:
+		logger.Error("不支持的研报来演:%v")
 		err = exception.New(exception.GetReportFailed)
 		return
 	}
-	json, err := json.Marshal(detail)
-	if err != nil {
-		logger.Error("生成研报详情失败:%v", err)
-		err = exception.New(exception.GetReportFailed)
-	}
-	report.Detail = json
-	return
 }
 
 func getETAReportDetail(report *reportService.ReportDTO) (etaReport reportService.ETAReportDTO, err error) {
 	return reportService.GetETAReport(report.OrgId)
 }
 
+func getHTReportDetail(report *reportService.ReportDTO) (url string, err error) {
+	return reportService.GetHtReport(report.OrgId)
+}
 func GetTotalPageCount() (total int64) {
 	return reportService.GetTotalPageCount()
 }
 
-func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestId int64, ids []int) {
+func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestId int64, ids map[string][]int) {
 	if len(permissionIds) == 0 {
 		total = GetTotalPageCount()
 		latestId = total
-		return total, latestId, []int{}
+		return total, latestId, map[string][]int{}
 	}
 	return reportService.GetTotalPageCountByPermissionIds(permissionIds)
 }
@@ -137,7 +148,7 @@ func SearchMaxReportId(key string) (total int64, id int64) {
 }
 
 // GetReportPage 分页获取报告列表
-func GetReportPage(pageInfo page.PageInfo, orgIds []int) (list []reportService.ReportDTO, err error) {
+func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int) (list []reportService.ReportDTO, err error) {
 	list, err = reportService.GetReportPageByOrgIds(pageInfo, orgIds)
 	//并发获取研报的标签
 	var wg sync.WaitGroup