report.go 8.6 KB

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