report_chapter.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  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/tables/chart_permission_chapter_mapping"
  8. "hongze/hongze_yb/models/tables/rddp/report"
  9. "hongze/hongze_yb/models/tables/rddp/report_chapter"
  10. "hongze/hongze_yb/models/tables/report_chapter_type"
  11. "hongze/hongze_yb/services/company"
  12. "hongze/hongze_yb/services/user"
  13. "hongze/hongze_yb/utils"
  14. )
  15. // GetReportTypeIdsByPermissionIds 获取所有和权限绑定的报告章节ID
  16. func GetReportTypeIdsByPermissionIds(permissionIds []int) (ids []int, err error) {
  17. ids, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds, "week")
  18. return
  19. }
  20. // GetLatestWeek 获取有权限的最新的周报
  21. func GetLatestWeek(permissionIds []int, typeIds []int) (reportInfo *report.Report, err error) {
  22. newTypeIds, err := GetWeekTypeIdsByPermissionIds(permissionIds, typeIds)
  23. chapter, err := report_chapter.GetLatestChapterByTypeIdsAndClass(newTypeIds,"week")
  24. if err != nil {
  25. return
  26. }
  27. reportInfo, err = report.GetByReportId(chapter.ReportId)
  28. if err == utils.ErrNoRow {
  29. return nil, nil
  30. }
  31. return
  32. }
  33. // GetWeekTypeIdsByPermissionIds 获取有权限的章节类型ID
  34. func GetWeekTypeIdsByPermissionIds(permissionIds []int, typeIds []int) (newTypeIds []int, err error) {
  35. ids, err := GetReportTypeIdsByPermissionIds(permissionIds)
  36. if err != nil {
  37. return
  38. }
  39. if len(typeIds) == 0 {
  40. typeIds, err = report_chapter_type.GetEffectTypeID()
  41. if err != nil {
  42. return
  43. }
  44. }
  45. for _, v1 := range typeIds {
  46. for _, v2 := range ids {
  47. if v1 == v2 {
  48. newTypeIds = append(newTypeIds, v2)
  49. }
  50. }
  51. }
  52. return
  53. }
  54. // GetChapterListByReport 根据报告获取章节列表
  55. func GetChapterListByReport(classifyNameFirst string, reportId int, companyId int64) (reportTypeList[]*response.ReportChapterListItem, err error) {
  56. var errMsg string
  57. defer func() {
  58. if err != nil {
  59. global.LOG.Critical(fmt.Sprintf("GetChapterListByReport: err:%s, errMsg:%s", err.Error(), errMsg))
  60. }
  61. }()
  62. //查询有效的章节
  63. typeList, tErr := report_chapter_type.GetEffectTypes()
  64. if tErr != nil {
  65. errMsg = tErr.Error()
  66. err = errors.New("章节类型查询出错")
  67. return
  68. }
  69. if len(typeList) == 0 {
  70. err = errors.New("无有效的章节")
  71. return
  72. }
  73. typeMap := make(map[uint64]*report_chapter_type.ReportChapterType)
  74. var typeIds []int
  75. newTypeMap := make(map[int]bool)
  76. for _, v := range typeList {
  77. typeMap[v.ReportChapterTypeId] = v
  78. typeIds = append(typeIds, int(v.ReportChapterTypeId))
  79. }
  80. if classifyNameFirst == "周报" {
  81. permissionIds, tErr := company.GetValidPermissionIdListByCompany2ProductId(companyId, 1)
  82. if tErr != nil {
  83. return
  84. }
  85. newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds, typeIds)
  86. if tErr != nil {
  87. err = tErr
  88. return
  89. }
  90. for _, v := range newTypeIds {
  91. newTypeMap[v] = true
  92. }
  93. }
  94. //获取所有当前研报的章节
  95. chapterList, tErr := report_chapter.GetListByReportId(reportId, classifyNameFirst)
  96. if tErr != nil && tErr != utils.ErrNoRow{
  97. errMsg = err.Error()
  98. err = errors.New("章节查询出错")
  99. return
  100. }
  101. if len(chapterList) == 0 {
  102. err = errors.New("无有效章节")
  103. return
  104. }
  105. for _, item := range chapterList {
  106. if typeItem, ok := typeMap[uint64(item.TypeId)]; ok {
  107. // TODO 如果是周报只展示有权限的章节
  108. if classifyNameFirst == "周报" {
  109. if _, ok1 := newTypeMap[item.TypeId]; !ok1 {
  110. continue
  111. }
  112. }
  113. temp := new(response.ReportChapterListItem)
  114. temp.ReportChapterId = item.ReportChapterId
  115. temp.TypeId = item.TypeId
  116. temp.Title = item.Title
  117. temp.ReportId = item.ReportId
  118. temp.Sort = item.Sort
  119. temp.PublishTime = item.PublishTime
  120. temp.BannerUrl = typeItem.BannerUrl
  121. temp.PauseEndTime = typeItem.PauseEndTime
  122. temp.PauseStartTime = typeItem.PauseStartTime
  123. temp.EditImgUrl = typeItem.EditImgUrl
  124. temp.ReportChapterTypeKey = typeItem.ReportChapterTypeKey
  125. temp.ReportChapterTypeName = typeItem.ReportChapterTypeName
  126. temp.ReportChapterTypeThumb = typeItem.ReportChapterTypeThumb
  127. reportTypeList = append(reportTypeList, temp)
  128. }
  129. }
  130. return
  131. }
  132. // GetChapterDetail 获取章节详情
  133. func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDetail *response.ReportChapterDetail, err error) {
  134. var errMsg string
  135. defer func() {
  136. if err != nil {
  137. global.LOG.Critical(fmt.Sprintf("GetChapterDetail: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  138. }
  139. }()
  140. typeIds, err := report_chapter_type.GetEffectTypeID()
  141. if err != nil {
  142. errMsg = err.Error()
  143. err = errors.New("章节类型查询出错")
  144. return
  145. }
  146. if len(typeIds) == 0 {
  147. err = errors.New("无有效的章节类型")
  148. return
  149. }
  150. reportChapter, err := report_chapter.GetContentById(reportChapterId, typeIds)
  151. if err != nil {
  152. errMsg = err.Error()
  153. err = errors.New("章节查询出错")
  154. return
  155. }
  156. if reportChapter.ReportChapterId == 0 {
  157. err = errors.New("章节不存在")
  158. return
  159. }
  160. var authOk bool
  161. var chapterAuthOk bool
  162. var permissionCheckInfo company.PermissionCheckInfo
  163. reportInfo, tErr := report.GetByReportId(reportChapter.ReportId)
  164. if tErr != nil {
  165. errMsg = err.Error()
  166. err = errors.New("报告查询出错")
  167. return
  168. }
  169. if reportInfo.Id == 0 {
  170. err = errors.New("报告不存在")
  171. return
  172. }
  173. if reportInfo.ClassifyNameFirst == "周报" && reportChapter.IsEdit != 1 {
  174. err = errors.New("章节未编辑")
  175. return
  176. }
  177. //判断权限 TODO 查询章节相关的报告的charPermissionId
  178. var newTypeIds []int
  179. if reportInfo.ClassifyNameFirst == "晨报"{
  180. authOk, permissionCheckInfo, err = CheckDayReportPermission(user)
  181. if err != nil && err != utils.ErrNoRow {
  182. errMsg = err.Error()
  183. err = errors.New("权限查询出错")
  184. return
  185. }
  186. }else if reportInfo.ClassifyNameFirst == "周报"{
  187. authOk, permissionCheckInfo, err = CheckWeekReportPermission(user, reportInfo.Id)
  188. if err != nil && err != utils.ErrNoRow {
  189. errMsg = err.Error()
  190. err = errors.New("权限查询出错")
  191. return
  192. }
  193. permissionIds, tErr := company.GetValidPermissionIdListByCompany2ProductId(user.CompanyID, 1)
  194. if tErr != nil && tErr != utils.ErrNoRow{
  195. errMsg = tErr.Error()
  196. err = errors.New("权限查询出错")
  197. return
  198. }
  199. newTypeIds, err = GetWeekTypeIdsByPermissionIds(permissionIds, typeIds)
  200. if err != nil && err != utils.ErrNoRow{
  201. errMsg = err.Error()
  202. err = errors.New("周报章节权限查询出错")
  203. return
  204. }
  205. for _, v := range newTypeIds {
  206. if v == reportChapter.TypeId {
  207. chapterAuthOk = true
  208. }
  209. }
  210. authOk = chapterAuthOk
  211. }
  212. var chapterMenu []*response.ReportChapterMenu
  213. reportChapterItem := new(response.ReportChapterItem)
  214. reportChapterItem.ReportChapterId = reportChapter.ReportChapterId
  215. reportChapterItem.ReportId = reportChapter.ReportId
  216. reportChapterItem.TypeId = reportChapter.TypeId
  217. reportChapterItem.Title = reportChapter.Title
  218. reportChapterItem.ReportId = reportChapter.ReportId
  219. reportChapterItem.PublishTime = reportChapter.PublishTime
  220. reportChapterItem.VideoPlaySeconds = reportChapter.VideoPlaySeconds
  221. reportChapterItem.VideoName = reportChapter.VideoName
  222. reportChapterItem.VideoSize = reportChapter.VideoSize
  223. if authOk {
  224. reportChapterItem.Content = reportChapter.Content
  225. reportChapterItem.VideoUrl = reportChapter.VideoUrl
  226. //底部菜单切换
  227. if reportInfo.ClassifyNameFirst == "周报" {
  228. chapterMenu, err = GetMenuChapter(reportInfo.Id, newTypeIds, reportInfo.ClassifyNameFirst)
  229. }else{
  230. chapterMenu, err = GetMenuChapter(reportInfo.Id, typeIds, reportInfo.ClassifyNameFirst)
  231. }
  232. _ = AddViewRecord(user, reportInfo.Id, reportInfo.ClassifyNameFirst, reportChapterId)
  233. }else{
  234. reportChapterItem.ContentSub = reportChapter.ContentSub
  235. }
  236. reportChapterDetail = new(response.ReportChapterDetail)
  237. reportChapterDetail.ReportChapterItem = reportChapterItem
  238. reportChapterDetail.PermissionCheck = &permissionCheckInfo
  239. reportChapterDetail.ReportChapterMenuList = chapterMenu
  240. reportChapterDetail.AuthOk = authOk
  241. return
  242. }
  243. func GetMenuChapter(reportId int, typeIds []int, classifyNameFirst string) (reportTypeList []*response.ReportChapterMenu, err error) {
  244. //查询有效的章节
  245. typeList, tErr := report_chapter_type.GetEffectTypes()
  246. if tErr != nil {
  247. return
  248. }
  249. if len(typeList) == 0 {
  250. err = errors.New("无有效的章节")
  251. return
  252. }
  253. typeMap := make(map[uint64]*report_chapter_type.ReportChapterType)
  254. for _, v := range typeList {
  255. typeMap[v.ReportChapterTypeId] = v
  256. }
  257. //获取所有当前研报的章节
  258. chapterList, tErr := report_chapter.GetListByReportIdTypeIds(reportId, typeIds, classifyNameFirst)
  259. if tErr != nil && tErr != utils.ErrNoRow{
  260. return
  261. }
  262. if len(chapterList) > 0 {
  263. for _, item := range chapterList {
  264. if typeItem, ok := typeMap[uint64(item.TypeId)]; ok {
  265. temp := new(response.ReportChapterMenu)
  266. temp.ReportChapterId = item.ReportChapterId
  267. temp.ReportId = item.ReportId
  268. temp.ReportChapterTypeName = typeItem.ReportChapterTypeName
  269. temp.ReportChapterTypeThumb = typeItem.ReportChapterTypeThumb
  270. reportTypeList = append(reportTypeList, temp)
  271. }
  272. }
  273. }
  274. return
  275. }
  276. // CheckWeekReportPermission 验证周报的权限
  277. func CheckWeekReportPermission(userInfo user.UserInfo, reportId int) (authOk bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
  278. permissionIds, err := chart_permission_chapter_mapping.GetPermissionIdsByReportId(reportId, "week")
  279. if err != nil && err != utils.ErrNoRow {
  280. return
  281. }
  282. authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
  283. return
  284. }
  285. // CheckDayReportPermission 验证晨报的权限
  286. func CheckDayReportPermission(userInfo user.UserInfo) (authOk bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
  287. permissions, err := company.GetValidPermissionByCompany2ProductId(userInfo.CompanyID, 1)
  288. if err != nil && err != utils.ErrNoRow {
  289. return
  290. }
  291. if len(permissions) > 0 {
  292. authOk = true
  293. return
  294. }
  295. authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), []int{})
  296. return
  297. }