classify.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  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_search_key_word_mapping"
  8. "hongze/hongze_yb/models/tables/company_product"
  9. "hongze/hongze_yb/models/tables/rddp/classify"
  10. "hongze/hongze_yb/models/tables/rddp/report"
  11. "hongze/hongze_yb/services/company"
  12. "hongze/hongze_yb/services/user"
  13. "hongze/hongze_yb/utils"
  14. "sort"
  15. "strings"
  16. )
  17. // GetClassListByClassifyId 专栏详情:查询二级分类列表
  18. func GetClassListByClassifyId(user user.UserInfo, classifyIdFirst int) (list []*response.ClassifyListItem, err error) {
  19. var errMsg string
  20. defer func() {
  21. if err != nil {
  22. global.LOG.Critical(fmt.Sprintf("GetClassListByClassifyName: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  23. }
  24. }()
  25. classifyInfo, err := classify.GetByClassifyId(classifyIdFirst)
  26. if err != nil {
  27. errMsg = err.Error()
  28. err = errors.New("分类查询出错")
  29. return
  30. }
  31. if classifyInfo.Id == 0 {
  32. err = errors.New("分类不存在")
  33. return
  34. }
  35. if classifyInfo.ParentId != 0 {
  36. err = errors.New("不允许查询二级分类")
  37. return
  38. }
  39. classifyList, err := classify.GetListByPid(classifyInfo.Id)
  40. if err != nil {
  41. errMsg = err.Error()
  42. err = errors.New("二级分类查询出错")
  43. return
  44. }
  45. var secondIds []int
  46. for _, v := range classifyList {
  47. secondIds = append(secondIds,v.Id)
  48. }
  49. //查询二级分类中最新的报告ID
  50. reportList, err := report.GetLatestReportsByClassifyIdFirst(classifyIdFirst, secondIds)
  51. if err != nil && err != utils.ErrNoRow {
  52. errMsg = err.Error()
  53. err = errors.New("报告查询出错")
  54. return
  55. }
  56. reportMap := make(map[int]*report.Report)
  57. for _, v := range reportList {
  58. reportMap[v.ClassifyIdSecond] = v
  59. }
  60. for _, item := range classifyList {
  61. temp := new(response.ClassifyListItem)
  62. temp.ClassifyIdSecond = item.Id
  63. temp.ParentId = item.ParentId
  64. temp.AuthorDescript = item.AuthorDescript
  65. temp.ReportAuthor = item.ReportAuthor
  66. temp.HomeImgUrl = item.HomeImgUrl
  67. temp.ClassifyNameSecond = item.ClassifyName
  68. temp.VipTitle = item.VipTitle
  69. if classifyInfo.ClassifyName == "权益研报" {
  70. temp.ProductName = "权益"
  71. } else {
  72. temp.ProductName = "FICC"
  73. }
  74. // 专栏下无报告则不展示
  75. if _, ok := reportMap[item.Id]; ok {
  76. list = append(list, temp)
  77. temp.Stage = reportMap[item.Id].Stage
  78. }
  79. }
  80. return
  81. }
  82. func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *response.ClassifyDetail, err error) {
  83. var errMsg string
  84. defer func() {
  85. if err != nil {
  86. global.LOG.Critical(fmt.Sprintf("GetClassifyDetail: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  87. }
  88. }()
  89. classifyInfo, err := classify.GetByClassifyId(classifyIdSecond)
  90. if err != nil {
  91. errMsg = err.Error()
  92. err = errors.New("分类查询出错")
  93. return
  94. }
  95. if classifyInfo.Id == 0 {
  96. err = errors.New("分类不存在")
  97. return
  98. }
  99. if classifyInfo.ParentId == 0 {
  100. err = errors.New("只允许查询二级分类")
  101. return
  102. }
  103. //查询权限, 查询当前分类下的最新的报告,
  104. permissionIds, err := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
  105. if err != nil {
  106. errMsg = err.Error()
  107. err = errors.New("分类权限查询出错")
  108. return
  109. }
  110. authOk, permissionCheckInfo, _, err := company.GetCheckPermission(user.CompanyID, int(user.UserID), permissionIds)
  111. if err != nil && err != utils.ErrNoRow {
  112. errMsg = err.Error()
  113. err = errors.New("权限查询出错")
  114. return
  115. }
  116. detail = new(response.ClassifyDetail)
  117. detail.ClassifyIdSecond = classifyInfo.Id
  118. detail.ParentId = classifyInfo.ParentId
  119. detail.AuthorDescript = classifyInfo.AuthorDescript
  120. detail.ReportAuthor = classifyInfo.ReportAuthor
  121. detail.AvatarImgUrl = classifyInfo.AvatarImgUrl
  122. detail.ClassifyNameSecond = classifyInfo.ClassifyName
  123. detail.Abstract = classifyInfo.Abstract
  124. detail.Descript = classifyInfo.Descript
  125. detail.VipTitle = classifyInfo.VipTitle
  126. detail.PermissionCheck = &permissionCheckInfo
  127. detail.AuthOk = authOk
  128. return
  129. }
  130. // GetClassifyReportList 查询二级分类下的报告列表
  131. func GetClassifyReportList(user user.UserInfo, classifyIdSecond int, pageIndex, pageSize int) (list *response.ClassReportList, err error) {
  132. var errMsg string
  133. defer func() {
  134. if err != nil {
  135. global.LOG.Critical(fmt.Sprintf("GetClassifyDetail: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  136. }
  137. }()
  138. // 判断用户状态是否是正常和永续和试用
  139. var productAuthOk bool
  140. companyProduct, err := company_product.GetByCompany2ProductId(user.CompanyID, 1)
  141. if err == utils.ErrNoRow {
  142. err = nil
  143. }
  144. if err != nil {
  145. errMsg = err.Error()
  146. err = errors.New("查询用户购买产品出错")
  147. return
  148. }
  149. if companyProduct != nil {
  150. // 无FICC权限的客户不可见
  151. if companyProduct.CompanyProductID > 0 {
  152. // 已购或者试用用户可见
  153. if strings.Contains("永续,正式", companyProduct.Status) || (companyProduct.Status == "试用" && companyProduct.IsSuspend != 1) {
  154. productAuthOk = true
  155. }
  156. }
  157. }
  158. classifyInfo, err := classify.GetByClassifyId(classifyIdSecond)
  159. if err != nil {
  160. errMsg = err.Error()
  161. err = errors.New("分类查询出错")
  162. return
  163. }
  164. if classifyInfo.Id == 0 {
  165. err = errors.New("分类不存在")
  166. return
  167. }
  168. if classifyInfo.ParentId == 0 {
  169. err = errors.New("只允许查询二级分类")
  170. return
  171. }
  172. //查询权限, 查询当前分类下的最新的报告,
  173. var permissionIds []int
  174. if productAuthOk {
  175. permissionIds, err = chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
  176. if err != nil {
  177. errMsg = err.Error()
  178. err = errors.New("分类权限查询出错")
  179. return
  180. }
  181. }
  182. authOk, permissionCheckInfo, _, err := company.GetCheckPermission(user.CompanyID, int(user.UserID), permissionIds)
  183. if err != nil && err != utils.ErrNoRow {
  184. errMsg = err.Error()
  185. err = errors.New("权限查询出错")
  186. return
  187. }
  188. //查询 report列表
  189. offset := (pageIndex - 1) * pageSize
  190. reportList, err := report.GetListByClassifyIdSecond(classifyIdSecond, offset, pageSize)
  191. if err != nil {
  192. errMsg = err.Error()
  193. err = errors.New("查询报告列表出错")
  194. return
  195. }
  196. total, err := report.GetListCountByClassifyIdSecond(classifyIdSecond)
  197. if err != nil {
  198. errMsg = err.Error()
  199. err = errors.New("查询报告总数出错")
  200. return
  201. }
  202. var newList []*response.ClassReportListItem
  203. if len(reportList) > 0 {
  204. for _, reportInfo := range reportList {
  205. reportItem := new(response.ClassReportListItem)
  206. reportItem.ReportId = reportInfo.Id
  207. reportItem.Title = reportInfo.Title
  208. reportItem.PublishTime = reportInfo.PublishTime
  209. reportItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
  210. reportItem.ClassifyIdFirst = reportInfo.ClassifyIdFirst
  211. reportItem.ClassifyIdSecond = reportInfo.ClassifyIdSecond
  212. reportItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
  213. reportItem.Stage = reportInfo.Stage
  214. reportItem.Abstract = reportInfo.Abstract
  215. if reportInfo.Abstract != "" {
  216. reportItem.Abstract = "<div style=\"overflow: hidden;white-space: nowrap;text-overflow: ellipsis;\">" +reportInfo.Abstract+"</div>"
  217. }
  218. reportItem.Author = reportInfo.Author
  219. reportItem.ReportImgUrl = classifyInfo.ReportImgUrl
  220. reportItem.VideoName = reportInfo.VideoName
  221. reportItem.VideoPlaySeconds = reportInfo.VideoPlaySeconds
  222. if reportInfo.VideoUrl != "" && reportInfo.VideoName == "" {
  223. reportItem.VideoName = reportInfo.Title
  224. }
  225. if authOk {
  226. reportItem.VideoUrl = reportInfo.VideoUrl
  227. }
  228. newList = append(newList, reportItem)
  229. }
  230. }
  231. list = new(response.ClassReportList)
  232. list.Paging = response.GetPaging(pageIndex, pageSize, int(total))
  233. list.List = newList
  234. list.PermissionCheck = &permissionCheckInfo
  235. list.AuthOk = authOk
  236. return
  237. }
  238. // GetClassifySecondSimpleList 获取二级分类简写名称列表
  239. func GetClassifySecondSimpleList(user user.UserInfo, classifyIdFirst int) (list []*response.ClassifySimpleListItem, err error) {
  240. var errMsg string
  241. defer func() {
  242. if err != nil {
  243. global.LOG.Critical(fmt.Sprintf("GetClassifySecondSimpleList: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  244. }
  245. }()
  246. classifyParent, err := classify.GetByClassifyId(classifyIdFirst)
  247. if err != nil {
  248. errMsg = err.Error()
  249. err = errors.New("分类查询出错")
  250. return
  251. }
  252. if classifyParent.Id == 0 {
  253. err = errors.New("该分类不存在")
  254. return
  255. }
  256. simpleList, err := classify.GetListByPid(classifyIdFirst)
  257. if err != nil {
  258. errMsg = err.Error()
  259. err = errors.New("二级分类查询出错")
  260. return
  261. }
  262. if len(simpleList) > 0 {
  263. for _, item := range simpleList {
  264. if item.ClassifyName == classifyParent.ClassifyName && len(simpleList) == 1 {
  265. break
  266. }
  267. temp := new(response.ClassifySimpleListItem)
  268. temp.ClassifyIdSecond = item.Id
  269. temp.ClassifyNameSecond = item.ClassifyName
  270. if index := strings.Index(item.ClassifyName, "双周报"); index > 0{
  271. temp.ClassifySecondNameSimple = item.ClassifyName[0 : index]
  272. }else{
  273. temp.ClassifySecondNameSimple = item.ClassifyName
  274. }
  275. list = append(list, temp)
  276. }
  277. }
  278. return
  279. }
  280. // GetClassifyFirstList 获取一级分类列表
  281. func GetClassifyFirstList(user user.UserInfo) (list response.ClassifyFirstList, err error) {
  282. var errMsg string
  283. defer func() {
  284. if err != nil {
  285. global.LOG.Critical(fmt.Sprintf("GetClassifyFirstList: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  286. }
  287. }()
  288. classifyParents, err := classify.GetParentList()
  289. if err != nil {
  290. errMsg = err.Error()
  291. err = errors.New("分类查询出错")
  292. return
  293. }
  294. if len(classifyParents) == 0 {
  295. err = errors.New("分类不存在")
  296. return
  297. }
  298. // 当前版本一级分类固定
  299. classifyIconMap := map[string]string{
  300. "晨报": utils.ALIYUN_YBIMG_HOST + "ficc_icon_day_128.png",
  301. "周报": utils.ALIYUN_YBIMG_HOST + "ficc_icon_week_128.png",
  302. "双周报": utils.ALIYUN_YBIMG_HOST + "ficc_icon_two_week_128.png",
  303. "月报": utils.ALIYUN_YBIMG_HOST + "ficc_icon_month_128.png",
  304. "草根调研": utils.ALIYUN_YBIMG_HOST + "ficc_icon_grassroots_128.png",
  305. "需求报告": utils.ALIYUN_YBIMG_HOST + "ficc_icon_need_report_128.png",
  306. "宏观报告": utils.ALIYUN_YBIMG_HOST + "ficc_icon_hongguan_128.png",
  307. "日度点评": utils.ALIYUN_YBIMG_HOST + "ficc_icon_daily_comment_128.png",
  308. "数据点评": utils.ALIYUN_YBIMG_HOST + "ficc_icon_data_128.png",
  309. "碳市场价格周报": utils.ALIYUN_YBIMG_HOST + "ficc_icon_rcarbon_128.png",
  310. "行业调研": utils.ALIYUN_YBIMG_HOST + "ficc_icon_research_128.png",
  311. "海外视角": utils.ALIYUN_YBIMG_HOST + "ficc_icon_overseas_128.png",
  312. "百家谈": utils.ALIYUN_YBIMG_HOST + "ficc_icon_family_128.png",
  313. "会议纪要": utils.ALIYUN_YBIMG_HOST + "ficc_icon_meeting_128.png",
  314. "大事点评": utils.ALIYUN_YBIMG_HOST + "ficc_icon_big_thing_128.png",
  315. "年报合集": utils.ALIYUN_YBIMG_HOST + "ficc_icon_year_collect_128.png",
  316. }
  317. classifySortMap := map[string]int{
  318. "晨报": 1,
  319. "周报": 2,
  320. "双周报": 3,
  321. "月报": 4,
  322. "草根调研": 5,
  323. "需求报告": 6,
  324. "宏观报告": 7,
  325. "日度点评": 8,
  326. "数据点评": 9,
  327. "碳市场价格周报": 10,
  328. "行业调研": 11,
  329. "海外视角": 12,
  330. "百家谈": 13,
  331. "会议纪要": 14,
  332. "大事点评": 15,
  333. "年报合集": 16,
  334. }
  335. for _, item := range classifyParents {
  336. temp := new(response.ClassifyFirstListItem)
  337. temp.ClassifyIdFirst = item.Id
  338. temp.ClassifyNameFirst = item.ClassifyName
  339. temp.IconImgUrl = classifyIconMap[item.ClassifyName]
  340. temp.Sort = classifySortMap[item.ClassifyName]
  341. if temp.Sort == 0 {
  342. continue
  343. }
  344. // ShowType展示类型:1-列表 2-专栏; RedirectType跳转类型:1-专栏列表 2-报告列表 3-专栏详情
  345. temp.RedirectType = 2
  346. if item.ShowType == 2 {
  347. temp.RedirectType = 1
  348. classifyChild, _ := classify.GetChildByPid(item.Id)
  349. if classifyChild != nil && len(classifyChild) == 1 {
  350. // 存在二级分类且仅有一个时直接跳转专栏详情
  351. temp.ClassifyIdSecond = classifyChild[0].Id
  352. temp.ClassifyNameSecond = classifyChild[0].ClassifyName
  353. temp.RedirectType = 3
  354. }
  355. }
  356. list = append(list, temp)
  357. }
  358. if len(list) > 0 {
  359. sort.Sort(list)
  360. }
  361. return
  362. }