report_service.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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 GetReportById(reportId int) (report reportService.ReportDTO, err error) {
  42. return
  43. }
  44. func GetTotalPageCount() (total int64) {
  45. return reportService.GetTotalPageCount()
  46. }
  47. func SearchReportList(key string, pageInfo page.PageInfo) (reports []reportService.ReportDTO, err error) {
  48. offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
  49. reports, err = reportService.SearchReportList(key, offset, pageInfo.PageSize, pageInfo.LatestId)
  50. if err != nil {
  51. err = exception.New(exception.SearchReportPageFailed)
  52. }
  53. return
  54. }
  55. func SearchMaxReportId() (id int64) {
  56. return reportService.SearchMaxReportId()
  57. }
  58. // GetReportPage 分页获取报告列表
  59. func GetReportPage(pageInfo page.PageInfo) (list []reportService.ReportDTO, err error) {
  60. list, err = reportService.GetReportPage(pageInfo)
  61. if err != nil {
  62. err = exception.New(exception.QueryReportPageFailed)
  63. }
  64. return
  65. }
  66. func CountReport(count RecordCount) error {
  67. dto := convertToRecordCountDTO(count)
  68. return reportService.CountReport(dto)
  69. }
  70. func GetRandedReportByWeeklyHot(limit int) (reports []HotRankedReport, err error) {
  71. end := time.Now()
  72. begin := date.GetBeginOfTheWeek(end, time.Monday)
  73. hotReports := reportService.GetHotReports(begin.Format(time.DateOnly), end.Format(time.DateOnly), limit)
  74. if len(hotReports) > 0 {
  75. var dtoList []reportService.ReportDTO
  76. var ids []int
  77. for i := 0; i < len(hotReports); i++ {
  78. ids = append(ids, hotReports[i].ReportId)
  79. }
  80. dtoList, err = reportService.GetListByCondition("id", ids)
  81. if err != nil {
  82. logger.Error("获取本周最热研报列表失败:%v", err)
  83. err = exception.New(exception.GetHotRandListFailed)
  84. return
  85. }
  86. reports = make([]HotRankedReport, len(ids))
  87. for i := 0; i < len(dtoList); i++ {
  88. report := convertToHotRankedReport(dtoList[i])
  89. for j := 0; j < len(ids); j++ {
  90. if ids[j] == report.Id {
  91. reports[j] = report
  92. break
  93. }
  94. }
  95. }
  96. } else {
  97. reports = []HotRankedReport{}
  98. }
  99. return
  100. }
  101. func GetRandedReportByPublishTime() (reports []PublishRankedReport, err error) {
  102. dtoList, err := reportService.GetListOrderByCondition("published_time", 3, reportService.DESC)
  103. if err != nil {
  104. logger.Error("获取最新发布的研报列表失败:%v", err)
  105. err = exception.New(exception.GetPublishedRandListFailed)
  106. return
  107. }
  108. //并发获取研报的标签
  109. var wg sync.WaitGroup
  110. wg.Add(len(dtoList))
  111. for i := 0; i < len(dtoList); i++ {
  112. go func(report *reportService.ReportDTO) {
  113. defer wg.Done()
  114. report.PermissionNames = getReportPermissionNames(report.OrgId, report.Source)
  115. }(&dtoList[i])
  116. }
  117. wg.Wait()
  118. reports = convertToPublishRankedReportList(dtoList)
  119. return
  120. }
  121. func getReportPermissionNames(id int, source string) (labels []string) {
  122. permissions := reportService.GetReportPermissionsById(id, source)
  123. for _, permission := range permissions {
  124. labels = append(labels, permission.Name)
  125. }
  126. return
  127. }
  128. func GetPermissionList() (root *PermissionNode, err error) {
  129. list, err := reportService.GetPermissionList()
  130. if err != nil {
  131. logger.Error("获取品种列表失败:%v", err)
  132. err = exception.New(exception.GetPermissionListFailed)
  133. return
  134. }
  135. root = &PermissionNode{
  136. ID: 0,
  137. ParentID: 0,
  138. }
  139. assemblePermissionNode(list, root, 0, 2)
  140. return
  141. }
  142. func assemblePermissionNode(list []reportService.PermissionDTO, node *PermissionNode, current int, level int) {
  143. if node != nil && current < level {
  144. for _, permission := range list {
  145. if permission.ParentID == node.ID {
  146. childNode := &PermissionNode{
  147. ID: permission.ID,
  148. Name: permission.Name,
  149. ParentID: permission.ParentID,
  150. }
  151. node.Children = append(node.Children, childNode)
  152. assemblePermissionNode(list, childNode, current+1, level)
  153. }
  154. }
  155. }
  156. }
  157. func convertToHotRankedReport(dto reportService.ReportDTO) (report HotRankedReport) {
  158. report = HotRankedReport{
  159. Id: dto.ReportID,
  160. OrgId: dto.OrgId,
  161. PublishedTime: dto.PublishedTime,
  162. Title: dto.Title,
  163. }
  164. //publishDate, err := time.Parse(time.DateTime, report.PublishedTime)
  165. //if err == nil {
  166. // report.PublishedTime = publishDate.Format(time.DateOnly)
  167. //}
  168. return
  169. }
  170. func convertToPublishRankedReportList(dtoList []reportService.ReportDTO) (reports []PublishRankedReport) {
  171. reports = []PublishRankedReport{}
  172. for _, dto := range dtoList {
  173. report := PublishRankedReport{
  174. Id: dto.ReportID,
  175. OrgId: dto.OrgId,
  176. PublishedTime: dto.PublishedTime,
  177. Abstract: dto.Abstract,
  178. Title: dto.Title,
  179. PermissionNames: dto.PermissionNames,
  180. }
  181. //publishDate, err := time.Parse(time.DateTime, report.PublishedTime)
  182. //if err == nil {
  183. // report.PublishedTime = publishDate.Format(time.DateOnly)
  184. //}
  185. reports = append(reports, report)
  186. }
  187. return
  188. }
  189. func convertToRecordCountDTO(record RecordCount) (dto reportService.RecordCountDTO) {
  190. return reportService.RecordCountDTO{
  191. UserId: record.UserId,
  192. Mobile: record.Mobile,
  193. ReportId: record.ReportId,
  194. IpAddress: record.IpAddress,
  195. Location: record.Location,
  196. Referer: record.Referer,
  197. Additional: record.Additional,
  198. }
  199. }