report.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. package models
  2. import (
  3. "eta/eta_mini_api/utils"
  4. "github.com/beego/beego/v2/client/orm"
  5. "time"
  6. )
  7. type UnionReport struct {
  8. Id int `description:"报告ID"`
  9. Title string `description:"报告标题"`
  10. Abstract string `description:"摘要"`
  11. PublishTime time.Time `description:"发布时间"`
  12. ReportSource int `description:"报告来源:1-report表;2-outside_report表"`
  13. ReportFile string `description:"报告附件"`
  14. ClassifyIdFirst int `description:"一级分类ID"`
  15. ClassifyIdSecond int `description:"二级分类ID"`
  16. ClassifyIdThird int `description:"三级分类ID"`
  17. Author string `description:"作者"`
  18. }
  19. type UnionReportItem struct {
  20. Id int `description:"报告ID"`
  21. Title string `description:"报告标题"`
  22. Abstract string `description:"摘要"`
  23. PublishTime string `description:"发布时间"`
  24. ReportSource int `description:"报告来源:1-report表;2-outside_report表"`
  25. ReportFile string `description:"报告附件"`
  26. ClassifyId int `description:"分类ID"`
  27. ClassifyName string `description:"分类名称"`
  28. Author string `description:"作者"`
  29. }
  30. func GetReportAndOutsideReportCount(reportCond, outsideCond string, reportPars, outsidePars []interface{}) (total int, err error) {
  31. o := orm.NewOrmUsingDB("rddp")
  32. sql := `SELECT COUNT(*) AS total
  33. FROM (
  34. (
  35. SELECT
  36. r.id AS id
  37. FROM
  38. report r
  39. WHERE
  40. r.state IN (2,6) ` + reportCond + `
  41. )
  42. UNION
  43. (
  44. SELECT
  45. o.outside_report_id AS id
  46. FROM
  47. outside_report o
  48. INNER JOIN
  49. outside_report_attachment oa
  50. ON
  51. o.outside_report_id = oa.outside_report_id
  52. WHERE
  53. oa.title LIKE '%.pdf%' AND oa.create_time = (
  54. SELECT MAX(oa2.create_time)
  55. FROM outside_report_attachment oa2
  56. WHERE oa2.outside_report_id = o.outside_report_id AND oa2.title LIKE '%.pdf%'
  57. ) ` + outsideCond + `
  58. )
  59. ) AS t`
  60. //sql = fmt.Sprintf(sql, reportCond, outsideCond)
  61. err = o.Raw(sql, reportPars, outsidePars).QueryRow(&total)
  62. return
  63. }
  64. // GetReportAndOutsideReportByCondition 查询报告及外部中PDF的报告
  65. func GetReportAndOutsideReportByCondition(reportCond, outsideCond string, reportPars, outsidePars []interface{}, startSize, pageSize int) (items []*UnionReport, err error) {
  66. o := orm.NewOrmUsingDB("rddp")
  67. sql := `(
  68. SELECT
  69. r.id AS id,
  70. r.title AS title,
  71. r.abstract AS abstract,
  72. r.publish_time AS publish_time,
  73. 1 AS report_source,
  74. detail_pdf_url AS report_file,
  75. r.classify_id_first,
  76. r.classify_id_second,
  77. r.classify_id_third,
  78. r.author
  79. FROM
  80. report r
  81. WHERE
  82. r.state IN (2,6) ` + reportCond + `
  83. )
  84. UNION
  85. (
  86. SELECT
  87. o.outside_report_id AS id,
  88. o.title AS title,
  89. o.abstract AS abstract,
  90. o.modify_time AS publish_time,
  91. 2 AS report_source,
  92. oa.url AS report_file,
  93. o.classify_id AS classify_name_first,
  94. o.classify_id AS classify_name_second,
  95. o.classify_id AS classify_name_third,
  96. o.sys_user_name AS author
  97. FROM
  98. outside_report o
  99. INNER JOIN
  100. outside_report_attachment oa
  101. ON
  102. o.outside_report_id = oa.outside_report_id
  103. WHERE
  104. oa.title LIKE '%.pdf%' AND oa.create_time = (
  105. SELECT MAX(oa2.create_time)
  106. FROM outside_report_attachment oa2
  107. WHERE oa2.outside_report_id = o.outside_report_id AND oa2.title LIKE '%.pdf%'
  108. ) ` + outsideCond + `
  109. )
  110. ORDER BY publish_time DESC LIMIT ?,?`
  111. //sql = fmt.Sprintf(sql, reportCond, outsideCond)
  112. _, err = o.Raw(sql, reportPars, outsidePars, startSize, pageSize).QueryRows(&items)
  113. return
  114. }
  115. type Report struct {
  116. Id int `orm:"pk" description:"报告Id"`
  117. AddType int `description:"新增方式:1:新增报告,2:继承报告"`
  118. ClassifyIdFirst int `description:"一级分类id"`
  119. ClassifyNameFirst string `description:"一级分类名称"`
  120. ClassifyIdSecond int `description:"二级分类id"`
  121. ClassifyNameSecond string `description:"二级分类名称"`
  122. ClassifyIdThird int `description:"三级分类id"`
  123. ClassifyNameThird string `description:"三级分类名称"`
  124. Title string `description:"标题"`
  125. Abstract string `description:"摘要"`
  126. Author string `description:"作者"`
  127. Frequency string `description:"频度"`
  128. CreateTime string `description:"创建时间"`
  129. ModifyTime time.Time `description:"修改时间"`
  130. State int `description:"1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
  131. PublishTime time.Time `description:"发布时间"`
  132. Stage int `description:"期数"`
  133. MsgIsSend int `description:"消息是否已发送,0:否,1:是"`
  134. ThsMsgIsSend int `description:"客户群消息是否已发送,0:否,1:是"`
  135. Content string `description:"内容"`
  136. VideoUrl string `description:"音频文件URL"`
  137. VideoName string `description:"音频文件名称"`
  138. VideoPlaySeconds string `description:"音频播放时长"`
  139. VideoSize string `description:"音频文件大小,单位M"`
  140. ContentSub string `description:"内容前两个章节"`
  141. ReportCode string `description:"报告唯一编码"`
  142. ReportVersion int `description:"1:旧版,2:新版"`
  143. HasChapter int `description:"是否有章节 0-否 1-是"`
  144. ChapterType string `description:"章节类型 day-晨报 week-周报"`
  145. OldReportId int `description:"research_report表ID, 大于0则表示该报告为老后台同步过来的"`
  146. MsgSendTime time.Time `description:"模版消息发送时间"`
  147. AdminId int `description:"创建者账号"`
  148. AdminRealName string `description:"创建者姓名"`
  149. ApproveTime time.Time `description:"审批时间"`
  150. ApproveId int `description:"审批ID"`
  151. DetailImgUrl string `description:"报告详情长图地址"`
  152. DetailPdfUrl string `description:"报告详情PDF地址"`
  153. ContentStruct string `description:"内容组件"`
  154. LastModifyAdminId int `description:"最后更新人ID"`
  155. LastModifyAdminName string `description:"最后更新人姓名"`
  156. ContentModifyTime time.Time `description:"内容更新时间"`
  157. Pv int `description:"pv"`
  158. Uv int `description:"uv"`
  159. HeadImg string `description:"报告头图地址"`
  160. EndImg string `description:"报告尾图地址"`
  161. CanvasColor string `description:"画布颜色"`
  162. NeedSplice int `description:"是否拼接版头版位的标记,主要是为了兼容历史报告。0-不需要 1-需要"`
  163. HeadResourceId int `description:"版头资源ID"`
  164. EndResourceId int `description:"版尾资源ID"`
  165. CollaborateType int8 `description:"协作方式,1:个人,2:多人协作。默认:1"`
  166. ReportLayout int8 `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
  167. IsPublicPublish int8 `description:"是否公开发布,1:是,2:否"`
  168. ReportCreateTime time.Time `description:"报告时间创建时间"`
  169. InheritReportId int `description:"待继承的报告ID"`
  170. VoiceGenerateType int `description:"音频生成方式,0:系统生成,1:人工上传"`
  171. }
  172. func (m *Report) GetItemById(id int) (item *Report, err error) {
  173. o := orm.NewOrmUsingDB("rddp")
  174. sql := `SELECT * FROM report WHERE id = ? LIMIT 1`
  175. err = o.Raw(sql, id).QueryRow(&item)
  176. return
  177. }
  178. type ReportDetail struct {
  179. Id int `description:"报告Id"`
  180. AddType int `description:"新增方式:1:新增报告,2:继承报告"`
  181. ClassifyIdFirst int `description:"一级分类id"`
  182. ClassifyNameFirst string `description:"一级分类名称"`
  183. ClassifyIdSecond int `description:"二级分类id"`
  184. ClassifyNameSecond string `description:"二级分类名称"`
  185. ClassifyIdThird int `description:"三级分类id"`
  186. ClassifyNameThird string `description:"三级分类名称"`
  187. Title string `description:"标题"`
  188. Abstract string `description:"摘要"`
  189. Author string `description:"作者"`
  190. Frequency string `description:"频度"`
  191. CreateTime string `description:"创建时间"`
  192. ModifyTime string `description:"修改时间"`
  193. State int `description:"1:未发布,2:已发布"`
  194. PublishTime string `description:"发布时间"`
  195. Stage int `description:"期数"`
  196. MsgIsSend int `description:"消息是否已发送,0:否,1:是"`
  197. Content string `description:"内容"`
  198. ChapterContent []*ReportChapter `description:"章节内容"`
  199. VideoUrl string `description:"音频文件URL"`
  200. VideoName string `description:"音频文件名称"`
  201. VideoPlaySeconds string `description:"音频播放时长"`
  202. VideoSize string `description:"音频文件大小,单位M"`
  203. ContentSub string `description:"内容前两个章节"`
  204. IsShowNewLabel int `description:"是否显示新标签"`
  205. IsCurrentDate int `description:"是否当前日期"`
  206. ClassifyName string `description:"分类名称"`
  207. TitleType string `description:"标题类型,FICC或者权益"`
  208. IsPublic bool `description:"是否是公共报告 "`
  209. HeadResourceId int `description:"版头资源库id"`
  210. EndResourceId int `description:"版尾资源库id"`
  211. HeadResource *SmartReportResource `description:"版头资源库"`
  212. EndResource *SmartReportResource `description:"版尾资源库"`
  213. CollaborateType int `description:"合作类型, 1:个人,2:多人协作"`
  214. ReportLayout int `description:"报告布局, 1:常规布局,2:智能布局"`
  215. HasChapter int `description:"是否有章节: 0-否 1-是"`
  216. }
  217. type ReportChapter struct {
  218. Title string `description:"章节标题"`
  219. Content string `description:"章节内容"`
  220. }
  221. func GetReportChapterList(reportId int) (items []*ReportChapter, err error) {
  222. o := orm.NewOrmUsingDB("rddp")
  223. sql := `SELECT * FROM report_chapter WHERE report_id=? ORDER BY sort ASC`
  224. _, err = o.Raw(sql, reportId).QueryRows(&items)
  225. return
  226. }
  227. func GetReportById(reportId int) (item *ReportDetail, err error) {
  228. o := orm.NewOrmUsingDB("rddp")
  229. sql := `SELECT * FROM report WHERE (state=2 OR state=6) AND id=?`
  230. err = o.Raw(sql, reportId).QueryRow(&item)
  231. return
  232. }
  233. type SmartReportResource struct {
  234. ResourceId int `description:"资源库id"`
  235. ImgUrl string `description:"图片url"`
  236. Type int `description:"资源类型:1-版头 2-版尾"`
  237. Style string `description:"版图样式"`
  238. }
  239. func GetSmartReportResourceById(resourceId int) (item *SmartReportResource, err error) {
  240. o := orm.NewOrmUsingDB("rddp")
  241. sql := `SELECT * FROM smart_report_resource WHERE resource_id=?`
  242. err = o.Raw(sql, resourceId).QueryRow(&item)
  243. return
  244. }
  245. type OutsideReport struct {
  246. OutsideReportId int `description:"报告ID"`
  247. Title string `description:"标题"`
  248. Abstract string `description:"摘要"`
  249. ClassifyId int `description:"分类ID"`
  250. ClassifyName string `description:"分类名称"`
  251. SysUserId int `description:"创建人ID"`
  252. SysUserName string `description:"创建人姓名"`
  253. ReportFile string `description:"报告附件"`
  254. CreateTime time.Time `description:"创建时间"`
  255. ModifyTime time.Time `description:"修改时间"`
  256. }
  257. func GetOutsideReportById(reportId int) (item *OutsideReport, err error) {
  258. o := orm.NewOrmUsingDB("rddp")
  259. sql := `SELECT
  260. o.outside_report_id,
  261. o.title,
  262. o.abstract,
  263. o.create_time,
  264. o.modify_time,
  265. o.classify_id,
  266. o.classify_name,
  267. o.sys_user_id,
  268. o.sys_user_name,
  269. oa.url AS report_file
  270. FROM
  271. outside_report o
  272. INNER JOIN
  273. outside_report_attachment oa
  274. ON
  275. o.outside_report_id = oa.outside_report_id
  276. WHERE
  277. o.outside_report_id = ?
  278. AND oa.title LIKE '%.pdf%'
  279. AND oa.create_time = (
  280. SELECT MAX(oa2.create_time)
  281. FROM outside_report_attachment oa2
  282. WHERE oa2.outside_report_id = o.outside_report_id AND oa2.title LIKE '%.pdf%'
  283. )
  284. LIMIT 1`
  285. err = o.Raw(sql, reportId).QueryRow(&item)
  286. return
  287. }
  288. type OutsideReportItem struct {
  289. OutsideReportId int `description:"报告ID"`
  290. Title string `description:"标题"`
  291. Abstract string `description:"摘要"`
  292. ClassifyId int `description:"分类ID"`
  293. ClassifyName string `description:"分类名称"`
  294. Author string `description:"作者"`
  295. ReportFile string `description:"报告附件"`
  296. CreateTime string `description:"创建时间"`
  297. ModifyTime string `description:"修改时间"`
  298. Status int `description:"报告权限:0-无权限;1-有权限"`
  299. }
  300. func (m *OutsideReport) Format2Item() (item *OutsideReportItem) {
  301. item = new(OutsideReportItem)
  302. item.OutsideReportId = m.OutsideReportId
  303. item.Title = m.Title
  304. item.Abstract = m.Abstract
  305. item.ClassifyId = m.ClassifyId
  306. item.ClassifyName = m.ClassifyName
  307. item.Author = m.SysUserName
  308. item.ReportFile = m.ReportFile
  309. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
  310. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
  311. return
  312. }