package report import ( logger "eta_mini_ht_api/common/component/log" "eta_mini_ht_api/common/exception" reportService "eta_mini_ht_api/domian/report" "sync" "time" ) type PublishRankedReport struct { Id int OrgId int Title string PublishedTime string } type PermissionNode struct { ID int `json:"id"` Name string `json:"name"` ParentID int `json:"parentId"` Children []*PermissionNode `json:"children"` } func GetRandedReportByPublishTime() (reports []PublishRankedReport, err error) { dtoList, err := reportService.GetListByConditionDesc("published_time", 3) if err != nil { logger.Error("获取最新发布的研报列表失败:%v", err) err = exception.New(exception.GetPublishedRandListFailed) return } reports = convertToPublishRankedReportList(dtoList) //并发获取研报的标签 var wg sync.WaitGroup wg.Add(len(dtoList)) for _, report := range reports { go func(report *PublishRankedReport) { defer wg.Done() _, err = getReportTags(report.OrgId) if err != nil { logger.Error("获取研报标签失败:%v", err) } }(&report) } wg.Wait() return } func getReportTags(id int) (labels []string, err error) { //reportService.getReportLabelsById(id) return } func convertToPublishRankedReportList(dtoList []reportService.ReportDTO) (reports []PublishRankedReport) { reports = []PublishRankedReport{} for _, dto := range dtoList { report := PublishRankedReport{ Id: dto.ReportID, OrgId: dto.OrgId, PublishedTime: dto.PublishedTime, Title: dto.Title, } date, err := time.Parse(time.DateTime, report.PublishedTime) if err == nil { report.PublishedTime = date.Format(time.DateOnly) } reports = append(reports, report) } return } func GetPermissionList() (root *PermissionNode, err error) { list, err := reportService.GetPermissionList() if err != nil { logger.Error("获取品种列表失败:%v", err) err = exception.New(exception.GetPermissionListFailed) return } root = &PermissionNode{ ID: 0, ParentID: 0, } assemblePermissionNode(list, root, 0, 2) return } func assemblePermissionNode(list []reportService.PermissionDTO, node *PermissionNode, current int, level int) { if node != nil && current < level { for _, permission := range list { if permission.ParentID == node.ID { childNode := &PermissionNode{ ID: permission.ID, Name: permission.Name, ParentID: permission.ParentID, } node.Children = append(node.Children, childNode) assemblePermissionNode(list, childNode, current+1, level) } } } }