report_service.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package report
  2. import (
  3. logger "eta_mini_ht_api/common/component/log"
  4. "eta_mini_ht_api/common/exception"
  5. "eta_mini_ht_api/common/utils/date"
  6. "eta_mini_ht_api/common/utils/page"
  7. reportService "eta_mini_ht_api/domian/report"
  8. "sync"
  9. "time"
  10. )
  11. type PublishRankedReport struct {
  12. Id int
  13. OrgId int
  14. Title string
  15. Abstract string
  16. PermissionNames interface{}
  17. PublishedTime string
  18. }
  19. type HotRankedReport struct {
  20. Id int
  21. OrgId int
  22. Count int
  23. Title string
  24. PublishedTime string
  25. }
  26. type PermissionNode struct {
  27. ID int `json:"id"`
  28. Name string `json:"name"`
  29. ParentID int `json:"parentId"`
  30. Children []*PermissionNode `json:"children,omitempty"`
  31. }
  32. type RecordCount struct {
  33. UserId int
  34. Mobile string
  35. ReportId int
  36. IpAddress string
  37. Location string
  38. Referer string
  39. Additional string
  40. }
  41. func GetTotalPageCount() (total int64) {
  42. return reportService.GetTotalPageCount()
  43. }
  44. // GetReportPage 分页获取报告列表
  45. func GetReportPage(pageInfo page.PageInfo) (list []reportService.ReportDTO, err error) {
  46. list, err = reportService.GetReportPage(pageInfo)
  47. if err != nil {
  48. err = exception.New(exception.QueryReportPageFailed)
  49. }
  50. return
  51. }
  52. func CountReport(count RecordCount) error {
  53. dto := convertToRecordCountDTO(count)
  54. return reportService.CountReport(dto)
  55. }
  56. func GetRandedReportByWeeklyHot(limit int) (reports []HotRankedReport, err error) {
  57. end := time.Now()
  58. begin := date.GetBeginOfTheWeek(end, time.Monday)
  59. hotReports := reportService.GetHotReports(begin.Format(time.DateOnly), end.Format(time.DateOnly), limit)
  60. if len(hotReports) > 0 {
  61. var dtoList []reportService.ReportDTO
  62. var ids []int
  63. for i := 0; i < len(hotReports); i++ {
  64. ids = append(ids, hotReports[i].ReportId)
  65. }
  66. dtoList, err = reportService.GetListByCondition("id", ids)
  67. if err != nil {
  68. logger.Error("获取本周最热研报列表失败:%v", err)
  69. err = exception.New(exception.GetHotRandListFailed)
  70. return
  71. }
  72. reports = make([]HotRankedReport, len(ids))
  73. for i := 0; i < len(dtoList); i++ {
  74. report := convertToHotRankedReport(dtoList[i])
  75. for j := 0; j < len(ids); j++ {
  76. if ids[j] == report.Id {
  77. reports[j] = report
  78. break
  79. }
  80. }
  81. }
  82. } else {
  83. reports = []HotRankedReport{}
  84. }
  85. return
  86. }
  87. func GetRandedReportByPublishTime() (reports []PublishRankedReport, err error) {
  88. dtoList, err := reportService.GetListOrderByCondition("published_time", 3, reportService.DESC)
  89. if err != nil {
  90. logger.Error("获取最新发布的研报列表失败:%v", err)
  91. err = exception.New(exception.GetPublishedRandListFailed)
  92. return
  93. }
  94. //并发获取研报的标签
  95. var wg sync.WaitGroup
  96. wg.Add(len(dtoList))
  97. for i := 0; i < len(dtoList); i++ {
  98. go func(report *reportService.ReportDTO) {
  99. defer wg.Done()
  100. report.PermissionNames = getReportPermissionNames(report.OrgId, report.Source)
  101. }(&dtoList[i])
  102. }
  103. wg.Wait()
  104. reports = convertToPublishRankedReportList(dtoList)
  105. return
  106. }
  107. func getReportPermissionNames(id int, source string) (labels []string) {
  108. permissions := reportService.GetReportPermissionsById(id, source)
  109. for _, permission := range permissions {
  110. labels = append(labels, permission.Name)
  111. }
  112. return
  113. }
  114. func GetPermissionList() (root *PermissionNode, err error) {
  115. list, err := reportService.GetPermissionList()
  116. if err != nil {
  117. logger.Error("获取品种列表失败:%v", err)
  118. err = exception.New(exception.GetPermissionListFailed)
  119. return
  120. }
  121. root = &PermissionNode{
  122. ID: 0,
  123. ParentID: 0,
  124. }
  125. assemblePermissionNode(list, root, 0, 2)
  126. return
  127. }
  128. func assemblePermissionNode(list []reportService.PermissionDTO, node *PermissionNode, current int, level int) {
  129. if node != nil && current < level {
  130. for _, permission := range list {
  131. if permission.ParentID == node.ID {
  132. childNode := &PermissionNode{
  133. ID: permission.ID,
  134. Name: permission.Name,
  135. ParentID: permission.ParentID,
  136. }
  137. node.Children = append(node.Children, childNode)
  138. assemblePermissionNode(list, childNode, current+1, level)
  139. }
  140. }
  141. }
  142. }
  143. func convertToHotRankedReport(dto reportService.ReportDTO) (report HotRankedReport) {
  144. report = HotRankedReport{
  145. Id: dto.ReportID,
  146. OrgId: dto.OrgId,
  147. PublishedTime: dto.PublishedTime,
  148. Title: dto.Title,
  149. }
  150. //publishDate, err := time.Parse(time.DateTime, report.PublishedTime)
  151. //if err == nil {
  152. // report.PublishedTime = publishDate.Format(time.DateOnly)
  153. //}
  154. return
  155. }
  156. func convertToPublishRankedReportList(dtoList []reportService.ReportDTO) (reports []PublishRankedReport) {
  157. reports = []PublishRankedReport{}
  158. for _, dto := range dtoList {
  159. report := PublishRankedReport{
  160. Id: dto.ReportID,
  161. OrgId: dto.OrgId,
  162. PublishedTime: dto.PublishedTime,
  163. Abstract: dto.Abstract,
  164. Title: dto.Title,
  165. PermissionNames: dto.PermissionNames,
  166. }
  167. //publishDate, err := time.Parse(time.DateTime, report.PublishedTime)
  168. //if err == nil {
  169. // report.PublishedTime = publishDate.Format(time.DateOnly)
  170. //}
  171. reports = append(reports, report)
  172. }
  173. return
  174. }
  175. func convertToRecordCountDTO(record RecordCount) (dto reportService.RecordCountDTO) {
  176. return reportService.RecordCountDTO{
  177. UserId: record.UserId,
  178. Mobile: record.Mobile,
  179. ReportId: record.ReportId,
  180. IpAddress: record.IpAddress,
  181. Location: record.Location,
  182. Referer: record.Referer,
  183. Additional: record.Additional,
  184. }
  185. }