report.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package report
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_yb/global"
  6. "hongze/hongze_yb/models/response"
  7. "hongze/hongze_yb/models/response/purchase"
  8. "hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
  9. "hongze/hongze_yb/models/tables/rddp/report"
  10. "hongze/hongze_yb/models/tables/rddp/report_chapter"
  11. "hongze/hongze_yb/models/tables/report_chapter_type"
  12. "hongze/hongze_yb/services/company"
  13. "hongze/hongze_yb/services/user"
  14. "hongze/hongze_yb/utils"
  15. "log"
  16. )
  17. func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error) {
  18. //获取所有和权限绑定的报告
  19. reportIds, err := GetReportIdsByPermissionIds(permissionIds)
  20. if err != nil {
  21. return
  22. }
  23. typeIds, tErr := report_chapter_type.GetEffectTypeID()
  24. if tErr != nil {
  25. err = tErr
  26. return
  27. }
  28. //获取最新的晨报
  29. dayReport, err := report.GetLatestDay()
  30. if err != nil {
  31. if err == utils.ErrNoRow {
  32. dayReport = nil
  33. }else{
  34. return
  35. }
  36. }
  37. //获取最新的有权限的周报
  38. weekReport, err := GetLatestWeek(permissionIds, typeIds)
  39. if err != nil {
  40. return
  41. }
  42. var reports []*report.Report
  43. if len(reportIds) > 0 {
  44. reports, err = report.GetLatestClassReportsByIDs(reportIds)
  45. if err != nil {
  46. return
  47. }
  48. }
  49. if dayReport != nil {
  50. reports = append(reports, dayReport)
  51. }
  52. if weekReport != nil {
  53. reports = append(reports, weekReport)
  54. }
  55. //获取未读数
  56. unReadItem, tErr := GetUnRead(reportIds, userId)
  57. if tErr != nil {
  58. err = tErr
  59. return
  60. }
  61. if len(reports) > 0 {
  62. for _, v := range reports {
  63. temp := new(purchase.PurchaseListItem)
  64. temp.ReportId = v.Id
  65. temp.ClassifyIdFirst = v.ClassifyIdFirst
  66. temp.ClassifyNameFirst = v.ClassifyNameFirst
  67. temp.Stage = v.Stage
  68. temp.Title = v.Title
  69. temp.ClassifyIdSecond = v.ClassifyIdSecond
  70. temp.ClassifyNameSecond = v.ClassifyNameSecond
  71. if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息
  72. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
  73. }else{
  74. if temp.ClassifyIdSecond > 0 { //包含二级分类
  75. temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
  76. } else { //无二级分类
  77. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
  78. }
  79. }
  80. temp.Time = v.PublishTime
  81. temp.Unread = unReadItem[temp.ClassifyNameFirst]
  82. purchaseList = append(purchaseList, temp)
  83. }
  84. }
  85. return
  86. }
  87. // GetReportIdsByPermissionIds 获取所有和权限绑定的报告
  88. func GetReportIdsByPermissionIds(permissionIds []int) (reportIds []int, err error) {
  89. reportIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds, "rddp")
  90. return
  91. }
  92. // GetListByClassName 根据分类类型,分页获取报告
  93. func GetListByClassName(reportIds []int, className string, offset, limit int ) (list []*report.Report, err error) {
  94. list, err = report.GetListByIDsAndClassID(reportIds, className, offset, limit)
  95. return
  96. }
  97. // GetPurchaseDetail 已购详情页面
  98. func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst string, offset, pageLimit int) (list []*purchase.Detail, err error) {
  99. var reports []*report.Report
  100. var reportIds []int
  101. if classifyNameFirst == "晨报" {
  102. //分类获取
  103. reports, err = report.GetListByClass(classifyNameFirst, offset, pageLimit)
  104. if err != nil {
  105. return
  106. }
  107. for _, v := range reports {
  108. reportIds = append(reportIds, v.Id)
  109. }
  110. }else {
  111. if classifyNameFirst == "周报" {
  112. newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds,[]int{})
  113. if tErr != nil {
  114. return
  115. }
  116. reportIds, err = report_chapter.GetReportIdsByTypeIdsAndClass(newTypeIds, classifyNameFirst)
  117. } else {
  118. reportIds, err = GetReportIdsByPermissionIds(permissionIds)
  119. if err != nil {
  120. return
  121. }
  122. }
  123. if len(reportIds) > 0 {
  124. //分类获取
  125. reports, err = GetListByClassName(reportIds, classifyNameFirst, offset, pageLimit)
  126. if err != nil {
  127. return
  128. }
  129. }
  130. }
  131. if len(reports) > 0 {
  132. var viewReportIds []int
  133. for _, v := range reports {
  134. viewReportIds = append(viewReportIds, v.Id)
  135. temp := new(purchase.Detail)
  136. temp.ReportId = v.Id
  137. temp.ClassifyIdFirst = v.ClassifyIdFirst
  138. temp.ClassifyNameFirst = v.ClassifyNameFirst
  139. temp.Title = v.Title
  140. temp.ClassifyIdSecond = v.ClassifyIdSecond
  141. temp.ClassifyNameSecond = v.ClassifyNameSecond
  142. if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息
  143. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
  144. temp.TopName = temp.Title
  145. }else{
  146. if temp.ClassifyIdSecond > 0 { //包含二级分类
  147. temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
  148. temp.TopName = temp.ClassifyNameSecond
  149. } else { //无二级分类
  150. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
  151. temp.TopName = temp.ClassifyNameFirst
  152. }
  153. }
  154. temp.Time = v.PublishTime
  155. list = append(list, temp)
  156. }
  157. }
  158. num, tErr := BatchInsertReportView(reportIds, userId, classifyNameFirst)
  159. log.Printf("新增报告浏览记录:%d", num)
  160. if tErr != nil {
  161. err = tErr
  162. return
  163. }
  164. return
  165. }
  166. // 获取报告详情
  167. func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail response.ReportDetail, err error) {
  168. var errMsg string
  169. defer func() {
  170. if err != nil {
  171. global.LOG.Critical(fmt.Sprintf("GetReportDetail: userId=%d, err:%s, errMsg:%s", userinfo.UserID, err.Error(), errMsg))
  172. }
  173. }()
  174. reportInfo, err := report.GetByReportId(reportId)
  175. if err != nil {
  176. errMsg = err.Error()
  177. err = errors.New("报告查询出错")
  178. return
  179. }
  180. if reportInfo.Id == 0 {
  181. err = errors.New("报告不存在")
  182. return
  183. }
  184. //判断权限
  185. var authOk bool
  186. var permissionCheckInfo company.PermissionCheckInfo
  187. if reportInfo.ClassifyNameFirst == "晨报"{
  188. authOk, permissionCheckInfo, err = CheckDayReportPermission(userinfo)
  189. }else if reportInfo.ClassifyNameFirst == "周报"{
  190. authOk, permissionCheckInfo, err = CheckWeekReportPermission(userinfo, reportId)
  191. }else{
  192. authOk, permissionCheckInfo, err = CheckReportPermission(userinfo, reportId)
  193. }
  194. if err != nil {
  195. return
  196. }
  197. reportItem := new(response.ReportItem)
  198. reportItem.ReportId = reportInfo.Id
  199. reportItem.Title = reportInfo.Title
  200. reportItem.PublishTime = reportInfo.PublishTime
  201. reportItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
  202. reportItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
  203. reportItem.Stage = reportInfo.Stage
  204. reportItem.Abstract = reportInfo.Abstract
  205. reportItem.ContentSub = reportInfo.ContentSub
  206. reportItem.Frequency = reportInfo.Frequency
  207. reportItem.VideoName = reportInfo.VideoName
  208. reportItem.VideoPlaySeconds = reportInfo.VideoPlaySeconds
  209. reportItem.Author = reportInfo.Author
  210. var reportTypeList []*response.ReportChapterListItem
  211. if (reportInfo.ClassifyNameFirst == "晨报" || reportInfo.ClassifyNameFirst == "周报") && authOk {
  212. reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, userinfo.CompanyID)
  213. if err != nil {
  214. return
  215. }
  216. }
  217. //如果有权限则展示content
  218. if authOk {
  219. _ = AddViewRecord(userinfo, reportInfo.Id, reportInfo.ClassifyNameFirst, 0)
  220. reportItem.Content = reportInfo.Content
  221. reportItem.VideoUrl = reportInfo.VideoUrl
  222. }
  223. reportDetail.ReportInfo = reportItem
  224. reportDetail.ReportChapterList = reportTypeList
  225. reportDetail.PermissionCheck = &permissionCheckInfo
  226. reportDetail.AuthOk = authOk
  227. return
  228. }
  229. // CheckReportPermission 验证用户查看报告的权限
  230. func CheckReportPermission(userInfo user.UserInfo, reportId int) (authOk bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
  231. permissionIds, err := chart_permission_chapter_mapping.GetPermissionIdsByReportId(reportId, "rddp")
  232. if err != nil && err != utils.ErrNoRow {
  233. return
  234. }
  235. authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
  236. return
  237. }