report.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package models
  2. import (
  3. "eta/eta_mini_bridge/utils"
  4. "fmt"
  5. "time"
  6. "github.com/beego/beego/v2/client/orm"
  7. )
  8. type ReportList struct {
  9. Id int `description:"报告Id"`
  10. AddType int `description:"新增方式:1:新增报告,2:继承报告"`
  11. ClassifyIdFirst int `description:"一级分类id"`
  12. ClassifyNameFirst string `description:"一级分类名称"`
  13. ClassifyIdSecond int `description:"二级分类id"`
  14. ClassifyNameSecond string `description:"二级分类名称"`
  15. PermissionNames []string `description:"二级分类名称"`
  16. Title string `description:"标题"`
  17. Abstract string `description:"摘要"`
  18. Author string `description:"作者"`
  19. Frequency string `description:"频度"`
  20. CreateTime string `description:"创建时间"`
  21. ModifyTime time.Time `description:"修改时间"`
  22. State int `description:"1:未发布,2:已发布"`
  23. PublishTime string `description:"发布时间"`
  24. Stage int `description:"期数"`
  25. MsgIsSend int `description:"消息是否已发送,0:否,1:是"`
  26. Content string `description:"内容"`
  27. VideoUrl string `description:"音频文件URL"`
  28. VideoName string `description:"音频文件名称"`
  29. VideoPlaySeconds string `description:"音频播放时长"`
  30. VideoSize string `description:"音频文件大小,单位M"`
  31. HasPermission int `description:"是否拥有报告权限,1:拥有,0:没有"`
  32. TitleType string `description:"标题类型,FICC或者权益"`
  33. IsCurrentDate int `description:"是否当前日期:1是,0不是"`
  34. ClassifyDetail
  35. }
  36. // GetReportDailyListCount 获得今日报告数量
  37. func GetReportDailyListCount() (count int, err error) {
  38. o := orm.NewOrmUsingDB("rddp")
  39. sql := ` SELECT COUNT(*) AS count FROM report WHERE 1=1 AND (state=2 OR state=6) AND DATE(publish_time)=DATE(NOW()) `
  40. err = o.Raw(sql).QueryRow(&count)
  41. return
  42. }
  43. // func GetReportDailyList(startSize, pageSize int) (items []*ReportList, err error) {
  44. // o := orm.NewOrmUsingDB("rddp")
  45. // sql := ` SELECT a.id,a.add_type,a.classify_id_first,a.classify_name_first,a.classify_id_second,a.classify_name_second,a.title,a.abstract,a.author,a.frequency,
  46. // a.create_time,a.modify_time,a.state,a.publish_time,a.stage,a.msg_is_send,b.id AS classify_id,b.classify_name,b.descript,b.report_author,b.author_descript,
  47. // b.report_img_url,b.head_img_url,b.avatar_img_url,b.column_img_url,a.video_url,a.video_name,a.video_play_seconds,a.video_size,
  48. // CASE WHEN DATE(a.publish_time)=DATE(NOW()) THEN 1 ELSE 0 END AS is_current_date
  49. // FROM report AS a
  50. // INNER JOIN classify AS b ON a.classify_id_second=b.id
  51. // WHERE (a.state=2 OR a.state=6) AND DATE(a.publish_time)=DATE(NOW())
  52. // ORDER BY a.publish_time DESC LIMIT ?,? `
  53. // _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  54. // return
  55. // }
  56. func GetReportDailyList(startSize, pageSize int) (items []*ReportList, err error) {
  57. o := orm.NewOrmUsingDB("rddp")
  58. sql := ` SELECT * FROM report WHERE (state=2 OR state=6) AND DATE(publish_time)=DATE(NOW()) ORDER BY publish_time DESC LIMIT ?,? `
  59. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  60. return
  61. }
  62. // GetReportRecentListCount 获得报告数量
  63. func GetReportRecentListCount() (count int, err error) {
  64. o := orm.NewOrmUsingDB("rddp")
  65. sql := ` SELECT COUNT(*) AS count FROM report
  66. WHERE 1=1 AND (state=2 OR state=6) AND classify_id_second IN (
  67. SELECT DISTINCT classify_id
  68. FROM chart_permission_search_key_word_mapping
  69. )`
  70. err = o.Raw(sql).QueryRow(&count)
  71. return
  72. }
  73. func GetReportRecentList(startSize, pageSize int) (items []*ReportList, err error) {
  74. o := orm.NewOrmUsingDB("rddp")
  75. sql := ` SELECT * FROM report WHERE (state=2 OR state=6) ORDER BY publish_time DESC LIMIT ?,? `
  76. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  77. return
  78. }
  79. func GetReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds []int, condition string) (count int, err error) {
  80. if len(classifyFirstIds) == 0 && len(classifySecondIds) == 0 && len(classifyThirdIds) == 0 {
  81. return
  82. }
  83. o := orm.NewOrmUsingDB("rddp")
  84. sql := `SELECT COUNT(*) AS count FROM report AS a WHERE (a.state=2 OR a.state=6) AND (1=2 `
  85. if len(classifyFirstIds) > 0 {
  86. sql += fmt.Sprintf(" OR a.classify_id_first IN (%s) ", utils.GetOrmReplaceHolder(len(classifyFirstIds)))
  87. }
  88. if len(classifySecondIds) > 0 {
  89. sql += fmt.Sprintf(" OR a.classify_id_second IN (%s) ", utils.GetOrmReplaceHolder(len(classifySecondIds)))
  90. }
  91. if len(classifyThirdIds) > 0 {
  92. sql += fmt.Sprintf(" OR a.classify_id_third IN (%s) ", utils.GetOrmReplaceHolder(len(classifyThirdIds)))
  93. }
  94. sql += ` ) `
  95. if condition != "" {
  96. sql += condition
  97. }
  98. err = o.Raw(sql, classifyFirstIds, classifySecondIds, classifyThirdIds).QueryRow(&count)
  99. return
  100. }
  101. func GetReportByClassifyIds(classifyIds []int, condition string) (count int, err error) {
  102. if len(classifyIds) == 0 {
  103. return
  104. }
  105. o := orm.NewOrmUsingDB("rddp")
  106. sql := `SELECT COUNT(*) AS count FROM report AS a
  107. WHERE (a.state=2 OR a.state=6) AND a.classify_id_second IN (%s) `
  108. sql = fmt.Sprintf(sql, utils.GetOrmReplaceHolder(len(classifyIds)))
  109. if condition != "" {
  110. sql += condition
  111. }
  112. err = o.Raw(sql, classifyIds).QueryRow(&count)
  113. return
  114. }
  115. func GetReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds []int, condition string, startSize, pageSize int) (items []*ReportList, err error) {
  116. if len(classifyFirstIds) == 0 && len(classifySecondIds) == 0 && len(classifyThirdIds) == 0 {
  117. return
  118. }
  119. o := orm.NewOrmUsingDB("rddp")
  120. sql := `SELECT a.id,a.add_type,a.classify_id_first,a.classify_name_first,a.classify_id_second,a.classify_name_second,a.title,a.abstract,a.author,a.frequency,
  121. a.create_time,a.modify_time,a.state,a.publish_time,a.stage,a.msg_is_send,b.id AS classify_id,b.classify_name,b.descript,b.report_author,b.author_descript,
  122. b.report_img_url,b.head_img_url,b.avatar_img_url,b.column_img_url,a.video_url,a.video_name,a.video_play_seconds,a.video_size,
  123. CASE WHEN DATE(a.modify_time)=DATE(NOW()) THEN 1 ELSE 0 END AS is_current_date
  124. FROM report AS a
  125. INNER JOIN classify AS b ON a.classify_id_second=b.id
  126. WHERE (a.state=2 OR a.state=6) AND (1=2 `
  127. // AND (a.classify_id_first IN (%s) OR a.classify_id_second IN (%s) OR a.classify_id_third IN (%s)) `
  128. if len(classifyFirstIds) > 0 {
  129. sql += fmt.Sprintf(" OR a.classify_id_first IN (%s) ", utils.GetOrmReplaceHolder(len(classifyFirstIds)))
  130. }
  131. if len(classifySecondIds) > 0 {
  132. sql += fmt.Sprintf(" OR a.classify_id_second IN (%s) ", utils.GetOrmReplaceHolder(len(classifySecondIds)))
  133. }
  134. if len(classifyThirdIds) > 0 {
  135. sql += fmt.Sprintf(" OR a.classify_id_third IN (%s) ", utils.GetOrmReplaceHolder(len(classifyThirdIds)))
  136. }
  137. sql += `) `
  138. if condition != "" {
  139. sql += condition
  140. }
  141. sql += ` ORDER BY a.publish_time DESC LIMIT ?,? `
  142. _, err = o.Raw(sql, classifyFirstIds, classifySecondIds, classifyThirdIds, startSize, pageSize).QueryRows(&items)
  143. return
  144. }
  145. type ReportDetail struct {
  146. Id int `description:"报告Id"`
  147. AddType int `description:"新增方式:1:新增报告,2:继承报告"`
  148. ClassifyIdFirst int `description:"一级分类id"`
  149. ClassifyNameFirst string `description:"一级分类名称"`
  150. ClassifyIdSecond int `description:"二级分类id"`
  151. ClassifyNameSecond string `description:"二级分类名称"`
  152. Title string `description:"标题"`
  153. Abstract string `description:"摘要"`
  154. Author string `description:"作者"`
  155. Frequency string `description:"频度"`
  156. CreateTime string `description:"创建时间"`
  157. ModifyTime string `description:"修改时间"`
  158. State int `description:"1:未发布,2:已发布"`
  159. PublishTime string `description:"发布时间"`
  160. Stage int `description:"期数"`
  161. MsgIsSend int `description:"消息是否已发送,0:否,1:是"`
  162. Content string `description:"内容"`
  163. ChapterContent []*ReportChapter `description:"章节内容"`
  164. VideoUrl string `description:"音频文件URL"`
  165. VideoName string `description:"音频文件名称"`
  166. VideoPlaySeconds string `description:"音频播放时长"`
  167. VideoSize string `description:"音频文件大小,单位M"`
  168. ContentSub string `description:"内容前两个章节"`
  169. IsShowNewLabel int `description:"是否显示新标签"`
  170. IsCurrentDate int `description:"是否当前日期"`
  171. ClassifyName string `description:"分类名称"`
  172. TitleType string `description:"标题类型,FICC或者权益"`
  173. IsPublic bool `description:"是否是公共报告 "`
  174. HeadResourceId int `description:"版头资源库id"`
  175. EndResourceId int `description:"版尾资源库id"`
  176. HeadResource *SmartReportResource `description:"版头资源库"`
  177. EndResource *SmartReportResource `description:"版尾资源库"`
  178. CollaborateType int `description:"合作类型, 1:个人,2:多人协作"`
  179. ReportLayout int `description:"报告布局, 1:常规布局,2:智能布局"`
  180. HasChapter int `description:"是否有章节: 0-否 1-是"`
  181. }
  182. type ReportChapter struct {
  183. Title string `description:"章节标题"`
  184. Content string `description:"章节内容"`
  185. }
  186. func GetReportChapterList(reportId int) (items []*ReportChapter, err error) {
  187. o := orm.NewOrmUsingDB("rddp")
  188. sql := `SELECT * FROM report_chapter WHERE report_id=?`
  189. _, err = o.Raw(sql, reportId).QueryRows(&items)
  190. return
  191. }
  192. func GetReportById(reportId int) (item *ReportDetail, err error) {
  193. o := orm.NewOrmUsingDB("rddp")
  194. sql := `SELECT * FROM report WHERE id=?`
  195. err = o.Raw(sql, reportId).QueryRow(&item)
  196. return
  197. }
  198. type ReportCollectListItem struct {
  199. ReportId int `description:"报告Id"`
  200. ReportChapterId int `description:"报告章节Id"`
  201. ClassifyIdFirst int `description:"一级分类id"`
  202. ClassifyNameFirst string `description:"一级分类名称" `
  203. ClassifyIdSecond int `description:"二级分类id"`
  204. ClassifyNameSecond string `description:"二级分类名称"`
  205. ReportChapterTypeId int `description:"报告章节类型id"`
  206. PublishTime time.Time `description:"发布时间"`
  207. Title string `description:"标题"`
  208. ContentSub string `description:"内容前两个章节"`
  209. Abstract string `description:"摘要"`
  210. Stage string `description:"期数"`
  211. Author string `description:"作者"`
  212. PdfUrl string `description:"pdf文件url"`
  213. ReportType int `description:"报告类型:1:eta报告,2:小程序pdf报告"`
  214. }
  215. type SmartReportResource struct {
  216. ResourceId int `description:"资源库id"`
  217. ImgUrl string `description:"图片url"`
  218. Type int `description:"资源类型:1-版头 2-版尾"`
  219. Style string `description:"版图样式"`
  220. }
  221. func GetSmartReportResourceById(resourceId int) (item *SmartReportResource, err error) {
  222. o := orm.NewOrmUsingDB("rddp")
  223. sql := `SELECT * FROM smart_report_resource WHERE resource_id=?`
  224. err = o.Raw(sql, resourceId).QueryRow(&item)
  225. return
  226. }