report_chapter.go 10 KB

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