report.go 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206
  1. package models
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hongze_clpt/utils"
  6. "strconv"
  7. "time"
  8. )
  9. type IndustrialManagementList struct {
  10. Paging *paging.PagingItem
  11. List []*IndustrialManagement
  12. }
  13. type IndustrialManagement struct {
  14. IndustrialManagementId int `orm:"column(industrial_management_id);pk" description:"产业id"`
  15. IndustryName string `description:"产业名称"`
  16. ChartPermissionId int `description:"权限id"`
  17. ChartPermissionName string `description:"权限名称"`
  18. LayoutTime string `description:"布局时间"`
  19. PublishDate string `description:"发布时间"`
  20. UpdateTime string `description:"更新时间"`
  21. IsRed bool `description:"是否标记红点"`
  22. IsHot bool `description:"是否是热门"`
  23. IsFollow bool `description:"是否关注"`
  24. IsNew bool `description:"是否展示 NEW 标签"`
  25. IsShowRoadshow bool `description:"是否展示 微路演 标签"`
  26. ArticleReadNum int `description:"文章阅读数量"`
  27. ArticleId int `description:"文章id"`
  28. Source int `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
  29. IndustrialSubjectList []*IndustrialSubject `description:"标的列表"`
  30. MinReportTime string `description:"报告最早发布时间"`
  31. IndustryVideo *MicroVideoSimpleInfo
  32. AuthInfo *UserPermissionAuthInfo
  33. }
  34. type MicroVideoSimpleInfo struct {
  35. Id int `description:"视频ID"`
  36. Type int `description:"类型: 1-音频; 2-活动视频; 3-产业视频 、 4-系列问答视频"`
  37. Title string `description:"标题"`
  38. ResourceUrl string `description:"链接"`
  39. BackgroundImg string `description:"背景图"`
  40. PlaySeconds int `description:"音视频时长"`
  41. DetailImgUrl string `description:"产业详情页背景图"`
  42. ChartPermissionId int `description:"行业ID"`
  43. ChartPermissionName string `description:"行业名称"`
  44. }
  45. type TacticsListResp struct {
  46. Paging *paging.PagingItem
  47. MatchTypeName string `description:"匹配类型"`
  48. CategoryImgUrlPc string `description:"图片"`
  49. List []*HomeArticle
  50. }
  51. type TacticsListTimeResp struct {
  52. Paging *paging.PagingItem
  53. MatchTypeName string `description:"匹配类型"`
  54. CategoryImgUrlPc string `description:"图片"`
  55. List []*TimeLineReportItem
  56. }
  57. // 报告搜索start
  58. type ReoprtSearchResp struct {
  59. Paging *paging.PagingItem
  60. ListHz []*ArticleResearchResp `description:"弘则报告"`
  61. ListYx []*ArticleResearchResp `description:"研选报告"`
  62. }
  63. // 搜索资源包 start
  64. type SearchResourceResp struct {
  65. ListHz []*IndustrialManagement `description:"弘则"`
  66. ListYx []*IndustrialManagement `description:"研选"`
  67. }
  68. type ArticleIdReq struct {
  69. ArticleId int `description:"文章id"`
  70. PlaySeconds int `description:"播放时长"`
  71. PageRouter string `description:"页面路径"`
  72. ReportType int `description:"2本周研究汇总、3上周纪要汇总"`
  73. }
  74. // 获取列表数量
  75. func GetReoprtSearchCount(condition string) (count int, err error) {
  76. o := orm.NewOrm()
  77. sql := `SELECT
  78. COUNT( 1 ) AS count
  79. FROM
  80. cygx_article AS a
  81. WHERE
  82. 1 = 1
  83. AND a.article_id < 1000000 `
  84. if condition != "" {
  85. sql += condition
  86. }
  87. err = o.Raw(sql).QueryRow(&count)
  88. return
  89. }
  90. func GetReoprtSearchCountYx(condition string) (count int, err error) {
  91. o := orm.NewOrm()
  92. sql := `SELECT
  93. COUNT( 1 ) AS count
  94. FROM
  95. cygx_article AS a
  96. WHERE
  97. 1 = 1`
  98. if condition != "" {
  99. sql += condition
  100. }
  101. err = o.Raw(sql).QueryRow(&count)
  102. return
  103. }
  104. func GetReoprtSearchCountHz(condition string) (count int, err error) {
  105. o := orm.NewOrm()
  106. sql := `SELECT
  107. COUNT( 1 ) AS count
  108. FROM
  109. cygx_article AS a
  110. WHERE
  111. 1 = 1`
  112. if condition != "" {
  113. sql += condition
  114. }
  115. err = o.Raw(sql).QueryRow(&count)
  116. return
  117. }
  118. // 列表
  119. func GetReoprtSearchList(condition string, userId, startSize, pageSize int) (items []*ArticleCollectionResp, err error) {
  120. o := orm.NewOrm()
  121. sql := `SELECT
  122. a.article_id,
  123. a.title,
  124. a.body,
  125. a.abstract,
  126. a.annotation,
  127. a.category_id,
  128. a.category_name,
  129. date_format( a.publish_date, '%Y-%m-%d' ) AS publish_date,
  130. m.industry_name,
  131. m.industrial_management_id,
  132. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  133. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  134. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND user_id = ?) AS my_collect_num
  135. FROM
  136. cygx_article AS a
  137. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  138. LEFT JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  139. WHERE
  140. 1 = 1 `
  141. if condition != "" {
  142. sql += condition
  143. }
  144. sql += ` GROUP BY a.article_id ORDER BY a.publish_date DESC LIMIT ?,? `
  145. _, err = o.Raw(sql, userId, startSize, pageSize).QueryRows(&items)
  146. return
  147. } //end
  148. // 获取行业报告列表
  149. func GetReportAndproductIndustrylList(categoryId, startSize, pageSize int) (items []*HomeArticle, total int, err error) {
  150. o := orm.NewOrm()
  151. sql := `SELECT
  152. art.article_id,
  153. art.title,
  154. art.publish_date,
  155. 1 AS resource
  156. FROM
  157. cygx_article AS art
  158. WHERE
  159. art.publish_status = 1
  160. AND art.article_id IN ( SELECT article_id FROM cygx_report_mapping_category_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` ) UNION ALL
  161. SELECT
  162. art.product_interior_id AS article_id,
  163. art.title,
  164. art.publish_time AS publish_date,
  165. 2 AS resource
  166. FROM
  167. cygx_product_interior AS art
  168. WHERE
  169. art.STATUS = 1
  170. AND art.visible_range = 1
  171. AND art.match_type_id = ` + strconv.Itoa(categoryId)
  172. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
  173. err = o.Raw(totalSql).QueryRow(&total)
  174. sql += ` ORDER BY publish_date DESC LIMIT ?,? `
  175. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  176. return
  177. }
  178. // 获取行业报告列表
  179. func GetReportAndproductIndustrylListimg(categoryId, userId, startSize, pageSize int) (items []*ArticleListResp, total int, err error) {
  180. o := orm.NewOrm()
  181. sql := `SELECT
  182. art.article_id,
  183. art.body,
  184. art.annotation,
  185. art.abstract,
  186. art.category_id,
  187. art.title,
  188. art.publish_date,
  189. 1 AS resource ,
  190. ( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = art.article_id ) AS readnum
  191. FROM
  192. cygx_article AS art
  193. WHERE
  194. art.publish_status = 1
  195. AND category_id IN ( SELECT category_id_celue FROM cygx_report_mapping_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` ) UNION ALL
  196. SELECT
  197. art.product_interior_id AS article_id,
  198. art.body,
  199. "",
  200. art.abstract,
  201. 0 as category_id,
  202. art.title,
  203. art.publish_time AS publish_date,
  204. 2 AS resource ,
  205. ( SELECT COUNT( 1 ) FROM cygx_product_interior_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.product_interior_id = art.product_interior_id ) AS readnum
  206. FROM
  207. cygx_product_interior AS art
  208. WHERE
  209. art.STATUS = 1
  210. AND art.visible_range = 1
  211. AND art.match_type_id = ` + strconv.Itoa(categoryId)
  212. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
  213. err = o.Raw(totalSql).QueryRow(&total)
  214. sql += ` ORDER BY publish_date DESC LIMIT ?,? `
  215. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  216. return
  217. }
  218. // 列表
  219. func GetSearchResourceList(condition string) (items []*IndustrialManagement, err error) {
  220. o := orm.NewOrm()
  221. sql := `SELECT
  222. m.industry_name,
  223. m.chart_permission_id,
  224. m.industrial_management_id,
  225. MAX( a.publish_date ) as publish_date_order,
  226. MIN( a.publish_date ) AS min_report_time,
  227. date_format( MAX( a.publish_date ), '%Y-%m-%d' ) AS publish_date
  228. FROM
  229. cygx_industrial_management AS m
  230. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
  231. INNER JOIN cygx_article AS a ON a.article_id = mg.article_id AND a.article_type != 'lyjh'
  232. WHERE
  233. 1 = 1
  234. AND publish_status = 1 ` + condition + ` GROUP BY m.industrial_management_id ORDER BY publish_date_order DESC `
  235. _, err = o.Raw(sql).QueryRows(&items)
  236. return
  237. }
  238. // 标的列表
  239. func GetThemeHeatSubjectList(condition string) (items []*IndustrialSubject, err error) {
  240. o := orm.NewOrm()
  241. sql := `SELECT
  242. m.subject_name,
  243. m.industrial_management_id,
  244. m.industrial_subject_id
  245. FROM
  246. cygx_article AS a
  247. INNER JOIN cygx_industrial_article_group_subject AS mg ON mg.article_id = a.article_id
  248. INNER JOIN cygx_industrial_subject AS m ON m.industrial_subject_id = mg.industrial_subject_id
  249. WHERE
  250. 1 = 1`
  251. if condition != "" {
  252. sql += condition
  253. }
  254. sql += ` AND publish_status = 1
  255. GROUP BY
  256. m.industrial_subject_id
  257. ORDER BY
  258. publish_date DESC`
  259. _, err = o.Raw(sql).QueryRows(&items)
  260. return
  261. } //end
  262. // 产业下所关联的文章分类列表
  263. func IndustrialToArticleCategory(industrialManagementId, chartPermissionId int) (items []*IndustrialToArticleCategoryRep, err error) {
  264. o := orm.NewOrm()
  265. sql := `SELECT map.match_type_name,map.category_id
  266. FROM cygx_report_mapping AS map
  267. INNER JOIN cygx_article AS art ON art.category_id = map.category_id
  268. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = art.article_id
  269. WHERE map.report_type = 2
  270. AND map.is_report = 1
  271. AND art.is_report = 1
  272. AND art.publish_status = 1
  273. AND man_g.industrial_management_id =?
  274. AND map.chart_permission_id = ?
  275. GROUP BY map.match_type_name`
  276. _, err = o.Raw(sql, industrialManagementId, chartPermissionId).QueryRows(&items)
  277. return
  278. }
  279. // 产业下所关联的文章、产品内测分类列表 2023-04-14
  280. func IndustrialToArticleAndProductInteriorCategoryNew(industrialManagementId int) (items []*IndustrialToArticleCategoryRep, err error) {
  281. o := orm.NewOrm()
  282. sql := `SELECT
  283. map.match_type_name,
  284. map.id AS category_id
  285. FROM
  286. cygx_report_mapping_cygx AS map
  287. INNER JOIN cygx_report_mapping_group AS g ON g.id_cygx = map.id
  288. INNER JOIN cygx_report_mapping_celue AS cl ON cl.category_id = g.category_id_celue
  289. INNER JOIN cygx_article AS art ON art.category_id = cl.category_id
  290. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = art.article_id
  291. WHERE
  292. 1 = 1
  293. AND map.report_type = 2
  294. AND map.is_report = 1
  295. AND art.is_report = 1
  296. AND art.publish_status = 1
  297. AND man_g.industrial_management_id = ?
  298. GROUP BY
  299. map.match_type_name UNION ALL
  300. SELECT
  301. map.match_type_name,
  302. map.id AS category_id
  303. FROM
  304. cygx_report_mapping_cygx AS map
  305. INNER JOIN cygx_industrial_management AS im ON im.chart_permission_id = map.chart_permission_id
  306. INNER JOIN cygx_product_interior AS art ON art.match_type_id = map.id
  307. INNER JOIN cygx_product_interior_industrial_group_management AS man_g ON man_g.product_interior_id = art.product_interior_id
  308. WHERE
  309. 1 = 1
  310. AND art.STATUS = 1
  311. AND art.visible_range = 1
  312. AND man_g.industrial_management_id = ?
  313. GROUP BY
  314. map.match_type_name`
  315. _, err = o.Raw(sql, industrialManagementId, industrialManagementId).QueryRows(&items)
  316. return
  317. }
  318. // 获取产业报告列表
  319. func GetReportAndproductInteriorIndustrialList(pars []interface{}, categoryId, industrialManagementId, userId, startSize, pageSize int) (items []*ArticleListResp, total int, err error) {
  320. o := orm.NewOrm()
  321. sql := `SELECT
  322. art.article_id,
  323. art.body,
  324. art.annotation,
  325. art.abstract,
  326. art.category_id,
  327. art.title,
  328. art.publish_date,
  329. ( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = art.article_id ) AS readnum ,
  330. 1 AS resource
  331. FROM
  332. cygx_article AS art
  333. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = art.article_id
  334. WHERE
  335. art.publish_status = 1
  336. AND art.article_id IN ( SELECT article_id FROM cygx_report_mapping_category_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` )
  337. AND art.is_class = 1
  338. AND man_g.industrial_management_id =` + strconv.Itoa(industrialManagementId) + `
  339. GROUP BY
  340. art.article_id UNION ALL
  341. SELECT
  342. art.product_interior_id AS article_id,
  343. art.body,
  344. "",
  345. art.abstract,
  346. 0 as category_id,
  347. art.title,
  348. art.publish_time AS publish_date,
  349. ( SELECT COUNT( 1 ) FROM cygx_product_interior_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.product_interior_id = art.product_interior_id ) AS readnum ,
  350. 2 AS resource
  351. FROM
  352. cygx_product_interior AS art
  353. INNER JOIN cygx_product_interior_industrial_group_management AS man_g ON man_g.product_interior_id = art.product_interior_id
  354. WHERE
  355. art.STATUS = 1
  356. AND art.visible_range = 1
  357. AND art.match_type_id = ` + strconv.Itoa(categoryId) + `
  358. AND man_g.industrial_management_id = ` + strconv.Itoa(industrialManagementId) + `
  359. GROUP BY
  360. art.product_interior_id `
  361. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
  362. err = o.Raw(totalSql, pars).QueryRow(&total)
  363. sql += ` ORDER BY publish_date DESC LIMIT ?,? `
  364. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  365. return
  366. }
  367. // 判断用户是否阅读该产业下,某一分类的文章
  368. func IndustrialUserRecordArticleCount(userId, industrialManagementId, categoryId int) (count int, err error) {
  369. o := orm.NewOrm()
  370. sql := `SELECT
  371. COUNT(1) count
  372. FROM
  373. cygx_article_history_record
  374. WHERE
  375. article_id = ( SELECT article_id FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND article_id < 1000000 AND category_id IN (SELECT
  376. category_id
  377. FROM
  378. cygx_report_mapping
  379. WHERE
  380. chart_permission_id = any( SELECT chart_permission_id FROM cygx_report_mapping WHERE category_id = ? )
  381. AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ) ORDER BY publish_date DESC LIMIT 0, 1 )
  382. AND user_id = ? `
  383. err = o.Raw(sql, industrialManagementId, categoryId, categoryId, userId).QueryRow(&count)
  384. return
  385. }
  386. // 获取最新文章
  387. func GetNewIndustrialUserRecordArticle(industrialManagementId, categoryId int) (item *ArticleDetail, err error) {
  388. o := orm.NewOrm()
  389. sql := ` SELECT * FROM cygx_article WHERE article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? ) AND category_id IN (SELECT
  390. category_id
  391. FROM
  392. cygx_report_mapping
  393. WHERE
  394. chart_permission_id = any( SELECT chart_permission_id FROM cygx_report_mapping WHERE category_id = ? )
  395. AND match_type_name = any( SELECT match_type_name FROM cygx_report_mapping WHERE category_id = ? ) ) ORDER BY publish_date DESC LIMIT 0, 1`
  396. err = o.Raw(sql, industrialManagementId, categoryId, categoryId).QueryRow(&item)
  397. return
  398. }
  399. // 列表
  400. func GetReoprtSearchListHz(condition string, userId int) (items []*ArticleCollectionResp, err error) {
  401. o := orm.NewOrm()
  402. sql := `SELECT
  403. a.article_id,
  404. a.title,
  405. a.annotation,
  406. date_format( a.publish_date, '%Y-%m-%d' ) AS publish_date,
  407. m.industry_name,
  408. m.industrial_management_id,
  409. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  410. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  411. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND user_id = ?) AS my_collect_num
  412. FROM
  413. cygx_article AS a
  414. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  415. LEFT JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  416. WHERE
  417. 1 = 1 `
  418. if condition != "" {
  419. sql += condition
  420. }
  421. _, err = o.Raw(sql, userId).QueryRows(&items)
  422. return
  423. } //end
  424. // 产业列表
  425. func GetSearchResourceListHz(condition string, startSize, pageSize int) (items []*IndustrialManagementHotResp, err error) {
  426. o := orm.NewOrm()
  427. sql := `SELECT
  428. m.industry_name,
  429. m.industrial_management_id,
  430. MAX( a.publish_date ) as publish_date_order,
  431. date_format( MAX( a.publish_date ), '%Y-%m-%d' ) AS publish_date
  432. FROM
  433. cygx_industrial_management AS m
  434. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
  435. INNER JOIN cygx_article AS a ON a.article_id = mg.article_id AND a.article_type != 'lyjh'
  436. WHERE
  437. 1 = 1
  438. AND publish_status = 1 ` + condition + ` GROUP BY m.industrial_management_id ORDER BY publish_date_order DESC `
  439. if startSize > 0 || pageSize > 0 {
  440. sql += ` LIMIT ` + strconv.Itoa(startSize) + "," + strconv.Itoa(pageSize)
  441. }
  442. _, err = o.Raw(sql).QueryRows(&items)
  443. return
  444. }
  445. // 用户收藏榜start
  446. type IndustrialManagementHotResp struct {
  447. IndustrialManagementId int `orm:"column(industrial_management_id);pk" description:"产业id"`
  448. IndustryName string `description:"产业名称"`
  449. IsFollow bool `description:"是否关注"`
  450. FllowNum int `description:"关注数量"`
  451. IsNew bool `description:"是否新标签"`
  452. IsHot bool `description:"是否新标签"`
  453. PublishDate string `description:"发布时间"`
  454. ArticleReadNum int `description:"文章阅读数量"`
  455. Source int `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
  456. MinReportTime string `description:"报告最早发布时间"`
  457. IndustrialSubjectList []*IndustrialSubject `description:"标的列表"`
  458. }
  459. // 搜索资源包 start
  460. type SearchReportAndResourceResp struct {
  461. ListHzResource []*IndustrialManagement `description:"弘则资源包"`
  462. ListHzReport []*ArticleCollectionResp `description:"弘则报告"`
  463. Paging *paging.PagingItem `description:"弘则报告分页"`
  464. }
  465. // 报告收藏榜单列表
  466. func GetReportCollectionBillboardList(limit int, pars []interface{}, condition string) (items []*ArticleListResp, err error) {
  467. o := orm.NewOrm()
  468. sql := `SELECT
  469. ac.id,
  470. a.article_id,
  471. a.category_id,
  472. a.title,
  473. a.annotation,
  474. a.publish_date,
  475. a.article_type_id,
  476. m.chart_permission_name,
  477. COUNT(ac.id) AS collection_num
  478. FROM
  479. cygx_article AS a
  480. INNER JOIN cygx_report_mapping AS m ON m.category_id = a.category_id_two
  481. INNER JOIN cygx_article_collect AS ac ON ac.article_id = a.article_id
  482. WHERE
  483. 1 = 1
  484. AND a.publish_status = 1 `
  485. if condition != "" {
  486. sql += condition
  487. }
  488. sql += ` GROUP BY a.article_id ORDER BY collection_num DESC, ac.id DESC, a.publish_date DESC`
  489. sql += ` LIMIT ?`
  490. _, err = o.Raw(sql, pars, limit).QueryRows(&items)
  491. return
  492. }
  493. // 研选报告收藏榜单列表
  494. func GetReportCollectionBillboardListYx(limit int, pars []interface{}, condition string) (items []*ArticleListResp, err error) {
  495. o := orm.NewOrm()
  496. sql := `SELECT
  497. ac.id,
  498. a.category_id,
  499. '买方研选' as chart_permission_name,
  500. a.article_id,
  501. a.title,
  502. a.body,
  503. a.annotation,
  504. a.abstract,
  505. a.publish_date,
  506. a.article_type_id,
  507. d.nick_name,
  508. d.department_id,
  509. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  510. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  511. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( ac.create_time ) ) AS collection_num
  512. FROM
  513. cygx_article AS a
  514. INNER JOIN cygx_article_collect AS ac ON ac.article_id = a.article_id
  515. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  516. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  517. INNER JOIN cygx_article_department AS d ON d.department_id = a.department_id
  518. WHERE
  519. 1 = 1
  520. AND a.publish_status = 1 `
  521. if condition != "" {
  522. sql += condition
  523. }
  524. sql += ` GROUP BY a.article_id ORDER BY collection_num DESC, a.publish_date DESC`
  525. sql += ` LIMIT ?`
  526. _, err = o.Raw(sql, pars, limit).QueryRows(&items)
  527. return
  528. }
  529. // 获取产业报告+晨会点评列表
  530. func GetTimeLineReportIndustrialList(industrialManagementId, startSize, pageSize int) (items []*ArticleListResp, total int, err error) {
  531. o := orm.NewOrm()
  532. sql := `SELECT
  533. a.id,
  534. a.article_id,
  535. a.title,
  536. a.publish_date
  537. FROM
  538. cygx_article AS a
  539. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = a.article_id
  540. WHERE
  541. a.publish_status = 1
  542. AND a.is_class = 1
  543. AND man_g.industrial_management_id = ? GROUP BY a.article_id UNION ALL
  544. SELECT
  545. mmc.id,
  546. 0,
  547. mmc.content AS title,
  548. mm.meeting_time AS publish_data
  549. FROM
  550. cygx_morning_meeting_review_chapter AS mmc
  551. INNER JOIN cygx_morning_meeting_reviews AS mm
  552. WHERE
  553. mm.id = mmc.meeting_id
  554. AND mm.STATUS = 1
  555. AND mmc.industry_id = ? `
  556. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
  557. err = o.Raw(totalSql, industrialManagementId, industrialManagementId).QueryRow(&total)
  558. sql += ` ORDER BY publish_date DESC LIMIT ?,? `
  559. _, err = o.Raw(sql, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
  560. return
  561. }
  562. type TimeLineReportItem struct {
  563. Id int `description:"文章或晨报点评id"`
  564. ArticleId int `description:"文章id"`
  565. Title string `description:"标题"`
  566. //PublishTime string `description:"发布时间"`
  567. PublishDate string `description:"发布时间"`
  568. Content string `description:"内容"`
  569. VideoUrl string `description:"视频链接"`
  570. VoiceUrl string `description:"音频链接"`
  571. IsHaveVideo bool `description:"是否包含视频"`
  572. ImgUrlPc string `description:"pc图片"`
  573. SubCategoryName string `description:"二级分类"`
  574. IsRed bool `description:"是否标红"`
  575. Readnum int `description:"阅读数量"`
  576. Resource int `description:"来源类型,1:文章、2:产品内测、3:晨报点评 4:活动回放视频 5:活动回放音频 "`
  577. Type int `description:"类型: 1-音频; 2-活动视频; 3-产业视频 、 4-系列问答视频"`
  578. LinkArticleId int `description:"晨会精华报告ID链接"`
  579. ListSubject []*CygxIndustrialSubject `description:"标的列表"`
  580. }
  581. // 获取产业报告+晨会点评列表
  582. func GetTimeLineReportIndustrialListTime(userId, industrialManagementId, startSize, pageSize int) (items []*TimeLineReportItem, total int, err error) {
  583. o := orm.NewOrm()
  584. sql := `SELECT
  585. *
  586. FROM
  587. (
  588. SELECT
  589. a.article_id AS id,
  590. a.article_id,
  591. a.title,
  592. a.publish_date,
  593. a.video_url,
  594. '' AS mi,
  595. a.sub_category_name,
  596. '' AS content,
  597. 1 AS resource,
  598. 0 AS type,
  599. ( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = a.article_id ) AS readnum
  600. FROM
  601. cygx_article AS a
  602. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = a.article_id
  603. WHERE
  604. a.publish_status = 1
  605. AND a.is_class = 1
  606. AND man_g.industrial_management_id = ? GROUP BY id UNION ALL
  607. SELECT
  608. mmc.id,
  609. 0 as article_id,
  610. mmc.title,
  611. mm.publish_time AS publish_date,
  612. '' AS video_url,
  613. '' AS voice_url,
  614. '时间线' AS sub_category_name,
  615. mmc.content,
  616. 3 AS resource,
  617. 0 AS type,
  618. 0 AS readnum
  619. FROM
  620. cygx_morning_meeting_review_chapter AS mmc
  621. INNER JOIN cygx_morning_meeting_reviews AS mm
  622. WHERE
  623. mm.id = mmc.meeting_id
  624. AND mm.STATUS = 1
  625. AND mmc.industry_id = ? UNION ALL
  626. SELECT
  627. p.product_interior_id AS id,
  628. p.product_interior_id as article_id,
  629. p.title,
  630. p.publish_time AS publish_date,
  631. '' AS video_url,
  632. '' AS voice_url,
  633. '' AS sub_category_name,
  634. '' AS content,
  635. 2 AS resource,
  636. 0 AS type,
  637. 0 AS readnum
  638. FROM
  639. cygx_product_interior AS p
  640. INNER JOIN cygx_product_interior_industrial_group_management AS pm
  641. WHERE
  642. p.product_interior_id = pm.product_interior_id
  643. AND p.visible_range = 1
  644. AND pm.industrial_management_id = ? UNION ALL
  645. SELECT
  646. cav.video_id AS id,
  647. 0 as article_id,
  648. cav.video_name AS title,
  649. ca.activity_time AS publish_time,
  650. cav.video_url AS video_url,
  651. '' AS voice_url,
  652. '' AS sub_category_name,
  653. '' AS content,
  654. 4 AS resource,
  655. 2 AS type,
  656. ( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.activity_id = ca.activity_id ) AS readnum
  657. FROM
  658. cygx_activity AS ca
  659. INNER JOIN cygx_activity_video AS cav ON ca.activity_id = cav.activity_id
  660. INNER JOIN cygx_industrial_activity_group_management AS cam ON ca.activity_id=cam.activity_id
  661. WHERE
  662. cam.industrial_management_id = ? AND cam.source = 1 UNION ALL
  663. SELECT
  664. ca.activity_id AS id,
  665. 0 as article_id,
  666. cavo.voice_name AS title,
  667. ca.activity_time AS publish_time,
  668. '' AS video_url,
  669. cavo.voice_url AS voice_url,
  670. '' AS sub_category_name,
  671. '' AS content,
  672. 5 AS resource,
  673. 1 AS type,
  674. ( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.activity_id = ca.activity_id ) AS readnum
  675. FROM
  676. cygx_activity AS ca
  677. INNER JOIN cygx_activity_voice AS cavo ON ca.activity_id = cavo.activity_id
  678. INNER JOIN cygx_industrial_activity_group_management AS cam ON ca.activity_id=cam.activity_id
  679. WHERE
  680. cam.industrial_management_id = ? AND cam.source = 1
  681. ) AS t`
  682. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
  683. err = o.Raw(totalSql, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId).QueryRow(&total)
  684. sql += ` ORDER BY
  685. t.publish_date DESC LIMIT ?,? `
  686. _, err = o.Raw(sql, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
  687. return
  688. }
  689. // 获取产业报告+晨会点评列表
  690. func GetTimeLineReportIndustrialListRed(userId, industrialManagementId, startSize, pageSize int) (items []*TimeLineReportItem, err error) {
  691. o := orm.NewOrm()
  692. sql := `SELECT
  693. *
  694. FROM
  695. (
  696. SELECT
  697. a.article_id AS id,
  698. a.title,
  699. a.publish_date ,
  700. a.video_url,
  701. a.sub_category_name,
  702. '' AS content,
  703. ( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = a.article_id ) AS readnum
  704. FROM
  705. cygx_article AS a
  706. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = a.article_id
  707. WHERE
  708. a.publish_status = 1
  709. AND a.is_class = 1
  710. AND man_g.industrial_management_id = ? GROUP BY id UNION ALL
  711. SELECT
  712. mmc.id,
  713. '' AS title,
  714. mm.publish_time AS publish_date,
  715. '' AS video_url,
  716. '时间线' AS sub_category_name,
  717. mmc.content,
  718. 0 AS readnum
  719. FROM
  720. cygx_morning_meeting_review_chapter AS mmc
  721. INNER JOIN cygx_morning_meeting_reviews AS mm
  722. WHERE
  723. mm.id = mmc.meeting_id
  724. AND mm.STATUS = 1
  725. AND mmc.industry_id = ?
  726. ) AS t
  727. `
  728. sql += ` ORDER BY
  729. t.publish_date DESC LIMIT ?,? `
  730. _, err = o.Raw(sql, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
  731. return
  732. }
  733. type IndustrialPublishdate struct {
  734. PublishDate string `description:"发布时间"`
  735. IndustrialManagementId int `description:"产业D"`
  736. }
  737. // 标的列表
  738. func GetTimeLineReportIndustrialPublishdateList(industrialIdArr []int) (items []*IndustrialPublishdate, err error) {
  739. o := orm.NewOrm()
  740. sql := `SELECT
  741. mmc.id,
  742. 0,
  743. mmc.industry_id AS industrial_management_id,
  744. mmc.content AS title,
  745. MAX( mm.meeting_time ) AS publish_date
  746. FROM
  747. cygx_morning_meeting_review_chapter AS mmc
  748. INNER JOIN cygx_morning_meeting_reviews AS mm
  749. WHERE
  750. mm.id = mmc.meeting_id
  751. AND mm.STATUS = 1
  752. AND mmc.industry_id IN (` + utils.GetOrmInReplace(len(industrialIdArr)) + `)
  753. GROUP BY industrial_management_id ORDER BY publish_date DESC `
  754. _, err = o.Raw(sql, industrialIdArr).QueryRows(&items)
  755. return
  756. }
  757. // 报告榜单start
  758. type ArticleReportBillboardResp struct {
  759. ArticleId int `description:"文章id"`
  760. Title string `description:"标题"`
  761. PublishDate string `description:"发布时间"`
  762. PermissionName string `description:"行业名称"`
  763. DepartmentId int `description:"作者Id"`
  764. NickName string `description:"作者昵称"`
  765. IsCollect bool `description:"本人是否收藏"`
  766. Pv int `description:"PV"`
  767. CollectNum int `description:"收藏人数"`
  768. Source int `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
  769. ArticleTypeId int `description:"文章类型ID判断是否是研选使用"`
  770. IsResearch bool `description:"是否属于研选"`
  771. ArticleTypeName string `description:"文章类型名称"`
  772. IsSpecial bool `description:"是否为研选专栏"`
  773. IsSpecialInt int `description:"是否为研选专栏"`
  774. SpecialTags string `description:"研选专栏标签"`
  775. MyCollectNum int `description:"本人是否收藏"`
  776. SpecialType int `description:"专栏类型 1:笔记,2:观点"`
  777. UserId int `description:"作者id"`
  778. IndustryTagStr string `description:"研选专栏行业标签"`
  779. CompanyTagsStr string `description:"研选专栏公司标签"`
  780. IndustryTags []string `description:"研选专栏行业标签"`
  781. CompanyTags []string `description:"研选专栏公司标签"`
  782. SpecialColumnId int `description:"专栏栏目id"`
  783. List []*IndustrialManagementIdInt
  784. }
  785. type ArticleReportBillboardLIstPageResp struct {
  786. List []*ArticleReportBillboardResp
  787. Paging *paging.PagingItem
  788. }
  789. type ArticleResearchListResp struct {
  790. Paging *paging.PagingItem
  791. List []*ArticleResearchResp
  792. }
  793. type ArticleResearchResp struct {
  794. ArticleId int `description:"文章id"`
  795. Title string `description:"标题"`
  796. Annotation string `description:"核心观点"`
  797. Abstract string `description:"摘要"`
  798. PublishDate string `description:"发布时间"`
  799. DepartmentId int `description:"作者Id"`
  800. NickName string `description:"作者昵称"`
  801. IsCollect bool `description:"本人是否收藏"`
  802. Pv int `description:"PV"`
  803. CollectNum int `description:"收藏人数"`
  804. Source int `description:"来源 1:弘则资源包(报告)、2:研选主题(报告)"`
  805. ArticleTypeId int `description:"文章类型ID"`
  806. ArticleTypeName string `description:"类型名称"`
  807. ButtonStyle string `description:"按钮展示样式"`
  808. ImgUrlPc string `description:"图片链接"`
  809. List []*IndustrialManagementIdInt `description:"产业列表"`
  810. ListSubject []*IndustrialSubject `description:"标的列表"`
  811. IsSpecial bool `description:"是否为研选专栏"`
  812. IndustryTags []string `description:"研选专栏行业标签"`
  813. CompanyTags []string `description:"研选专栏公司标签"`
  814. SpecialColumnId int `description:"专栏栏目id"`
  815. TopTime int `description:"置顶时间"`
  816. }
  817. // 获取数量
  818. func GetArticleResearchCount(condition string, pars []interface{}, needYanxuanSpecial bool) (count int, err error) {
  819. o := orm.NewOrm()
  820. sqlCount := `SELECT COUNT( 1 ) AS count FROM
  821. cygx_article AS a
  822. WHERE
  823. 1 = 1 AND a.publish_status = 1` + condition
  824. if needYanxuanSpecial {
  825. sqlCount = `SELECT SUM(count) AS count FROM (` + sqlCount + `
  826. UNION ALL
  827. SELECT COUNT( 1 ) AS count FROM
  828. cygx_yanxuan_special AS a WHERE
  829. 1 = 1 AND a.status = 3) AS c`
  830. }
  831. err = o.Raw(sqlCount, pars).QueryRow(&count)
  832. return
  833. }
  834. func GetArticleResearchList(condition string, pars []interface{}, startSize, pageSize, userId int, needYanxuanSpecial bool) (items []*ArticleListResp, err error) {
  835. o := orm.NewOrm()
  836. sql := `SELECT
  837. a.article_id,
  838. a.title,
  839. a.body,
  840. a.annotation,
  841. a.abstract,
  842. a.publish_date,
  843. a.article_type_id,
  844. d.nick_name,
  845. d.department_id,
  846. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  847. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  848. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( ac.create_time ) ) AS collect_num_order,
  849. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND user_id = ? ) AS my_collect_num,
  850. 0 AS is_special,
  851. 0 AS special_type,
  852. 0 AS special_column_id,
  853. '' AS company_tags,
  854. '' AS industry_tags,
  855. a.top_time
  856. FROM
  857. cygx_article AS a
  858. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  859. LEFT JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  860. INNER JOIN cygx_article_department AS d ON d.department_id = a.department_id
  861. WHERE
  862. 1 = 1 AND a.publish_status = 1 `
  863. if condition != "" {
  864. sql += condition
  865. }
  866. if needYanxuanSpecial {
  867. sql += `UNION ALL
  868. SELECT
  869. a.id AS article_id,
  870. a.title AS title,
  871. '' AS body,
  872. a.content AS annotation,
  873. '' AS abstract,
  874. a.publish_time AS publish_date,
  875. -1 AS article_type_id,
  876. b.nick_name AS nick_name,
  877. 0 AS department_id,
  878. ( SELECT count( 1 ) FROM cygx_yanxuan_special_record AS h WHERE h.yanxuan_special_id = a.id ) AS pv,
  879. ( SELECT count( 1 ) FROM cygx_yanxuan_special_collect AS ac WHERE ac.yanxuan_special_id = a.id ) AS collect_num,
  880. 0 AS collect_num_order,
  881. ( SELECT count( 1 ) FROM cygx_yanxuan_special_collect AS ac WHERE ac.yanxuan_special_id = a.id AND user_id = ? ) AS my_collect_num,
  882. 1 AS is_special,
  883. a.type AS special_type,
  884. b.id AS special_column_id,
  885. a.company_tags AS company_tags,
  886. a.industry_tags AS industry_tags,
  887. 0 as top_time
  888. FROM
  889. cygx_yanxuan_special AS a
  890. JOIN cygx_yanxuan_special_author AS b ON a.user_id = b.user_id
  891. WHERE
  892. 1 = 1 AND a.status = 3 `
  893. sql += ` GROUP BY article_id ORDER BY top_time DESC , publish_date DESC LIMIT ?,? `
  894. _, err = o.Raw(sql, userId, userId, pars, startSize, pageSize).QueryRows(&items)
  895. } else {
  896. sql += ` GROUP BY a.article_id ORDER BY top_time DESC , a.publish_date DESC LIMIT ?,? `
  897. _, err = o.Raw(sql, userId, pars, startSize, pageSize).QueryRows(&items)
  898. }
  899. return
  900. }
  901. func GetArticleResearchAndYxSpecialList(condition, conditionYxSpecial string, pars []interface{}, startSize, pageSize, userId int, needYanxuanSpecial bool) (total int, items []*ArticleListResp, err error) {
  902. o := orm.NewOrm()
  903. sql := `SELECT
  904. a.article_id,
  905. a.title,
  906. a.body,
  907. a.annotation,
  908. a.abstract,
  909. a.publish_date,
  910. a.article_type_id,
  911. d.nick_name,
  912. d.department_id,
  913. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  914. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  915. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( ac.create_time ) ) AS collect_num_order,
  916. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND user_id = ? ) AS my_collect_num,
  917. 0 AS is_special,
  918. 0 AS special_type,
  919. 0 AS special_column_id,
  920. '' AS company_tags,
  921. '' AS industry_tags
  922. FROM
  923. cygx_article AS a
  924. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  925. LEFT JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  926. INNER JOIN cygx_article_department AS d ON d.department_id = a.department_id
  927. WHERE
  928. 1 = 1 AND a.publish_status = 1 `
  929. if condition != "" {
  930. sql += condition
  931. }
  932. if needYanxuanSpecial {
  933. sql += `UNION ALL
  934. SELECT
  935. a.id AS article_id,
  936. a.title AS title,
  937. '' AS body,
  938. a.content AS annotation,
  939. '' AS abstract,
  940. a.publish_time AS publish_date,
  941. -1 AS article_type_id,
  942. b.nick_name AS nick_name,
  943. 0 AS department_id,
  944. ( SELECT count( 1 ) FROM cygx_yanxuan_special_record AS h WHERE h.yanxuan_special_id = a.id ) AS pv,
  945. ( SELECT count( 1 ) FROM cygx_yanxuan_special_collect AS ac WHERE ac.yanxuan_special_id = a.id ) AS collect_num,
  946. 0 AS collect_num_order,
  947. ( SELECT count( 1 ) FROM cygx_yanxuan_special_collect AS ac WHERE ac.yanxuan_special_id = a.id AND user_id = ? ) AS my_collect_num,
  948. 1 AS is_special,
  949. a.type AS special_type,
  950. b.id AS special_column_id,
  951. a.company_tags AS company_tags,
  952. a.industry_tags AS industry_tags
  953. FROM
  954. cygx_yanxuan_special AS a
  955. JOIN cygx_yanxuan_special_author AS b ON a.user_id = b.user_id
  956. WHERE
  957. 1 = 1 AND a.status = 3 ` + conditionYxSpecial
  958. totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
  959. err = o.Raw(totalSql, userId, userId, pars).QueryRow(&total)
  960. sql += ` GROUP BY article_id ORDER BY publish_date DESC LIMIT ?,? `
  961. _, err = o.Raw(sql, userId, userId, pars, startSize, pageSize).QueryRows(&items)
  962. } else {
  963. sql += ` GROUP BY a.article_id ORDER BY a.publish_date DESC LIMIT ?,? `
  964. _, err = o.Raw(sql, userId, pars, startSize, pageSize).QueryRows(&items)
  965. }
  966. return
  967. }
  968. func GetArticleResearchListHz(condition string, pars []interface{}, startSize, pageSize, userId int) (items []*ArticleListResp, err error) {
  969. o := orm.NewOrm()
  970. sql := `SELECT
  971. a.article_id,
  972. a.title,
  973. a.body,
  974. a.annotation,
  975. a.abstract,
  976. a.publish_date,
  977. a.category_id,
  978. a.article_type_id,
  979. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  980. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  981. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( ac.create_time ) ) AS collect_num_order,
  982. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id AND user_id = ? ) AS my_collect_num
  983. FROM
  984. cygx_article AS a
  985. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  986. LEFT JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  987. WHERE
  988. 1 = 1 AND a.publish_status = 1 `
  989. if condition != "" {
  990. sql += condition
  991. }
  992. sql += ` GROUP BY a.article_id ORDER BY a.publish_date DESC LIMIT ?,? `
  993. _, err = o.Raw(sql, userId, pars, startSize, pageSize).QueryRows(&items)
  994. return
  995. }
  996. type IndustrialManagementHotListResp struct {
  997. Paging *paging.PagingItem `description:"分页数据"`
  998. List []*IndustrialManagementHotResp
  999. }
  1000. // 获取数量
  1001. func GetThemeHeatListCount(condition string) (count int, err error) {
  1002. o := orm.NewOrm()
  1003. sql := `SELECT COUNT( DISTINCT m.industrial_management_id ) FROM
  1004. cygx_industrial_management AS m
  1005. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
  1006. LEFT JOIN cygx_article AS a ON a.article_id = mg.article_id
  1007. LEFT JOIN cygx_industrial_activity_group_management as ag ON ag.industrial_management_id = mg.industrial_management_id
  1008. WHERE
  1009. 1 = 1 AND a.publish_status = 1 ` + condition
  1010. err = o.Raw(sql).QueryRow(&count)
  1011. return
  1012. }
  1013. // 产业列表
  1014. func GetThemeHeatList(userId int, condition, conditionOrder string, startSize, pageSize int) (items []*IndustrialManagementHotResp, err error) {
  1015. o := orm.NewOrm()
  1016. sql := `SELECT
  1017. m.industry_name,
  1018. m.industrial_management_id,
  1019. m.article_read_num,
  1020. MAX( a.publish_date ) AS publish_date,
  1021. MIN(a.publish_date) AS min_report_time,
  1022. ( SELECT count( 1 ) FROM cygx_industry_fllow AS f WHERE f.industrial_management_id = m.industrial_management_id AND user_id =? AND f.type = 1 ) AS fllow_num,
  1023. m.yanxuan_article_read_num + m.activity_num AS sum_num
  1024. FROM
  1025. cygx_industrial_management AS m
  1026. LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
  1027. LEFT JOIN cygx_article AS a ON a.article_id = mg.article_id
  1028. LEFT JOIN cygx_industrial_activity_group_management as ag ON ag.industrial_management_id = mg.industrial_management_id
  1029. WHERE
  1030. 1 = 1
  1031. AND publish_status = 1 ` + condition + ` GROUP BY m.industrial_management_id ` + conditionOrder + ` , last_updated_time DESC LIMIT ?,?`
  1032. _, err = o.Raw(sql, userId, startSize, pageSize).QueryRows(&items)
  1033. return
  1034. }
  1035. type GetThemeAericleListResp struct {
  1036. ArticleId int `description:"文章id"`
  1037. Title string `description:"标题"`
  1038. PublishDate string `description:"发布时间"`
  1039. SubjectName string `description:"标的名称"`
  1040. IndustrialSubjectId int `description:"标的ID"`
  1041. DepartmentId int `description:"作者Id"`
  1042. NickName string `description:"作者昵称"`
  1043. Pv int `description:"PV"`
  1044. CollectNum int `description:"收藏人数"`
  1045. FllowNum int `description:"关注数量"`
  1046. MyCollectNum int `description:"本人是否收藏"`
  1047. IsCollect bool `description:"本人是否收藏"`
  1048. }
  1049. // 主题详情start
  1050. type GetThemeDetailResp struct {
  1051. IndustrialManagementId int `description:"产业Id"`
  1052. IndustryName string `description:"产业名称"`
  1053. IsFollow bool `description:"是否关注"`
  1054. ListSubject []*IndustrialSubject `description:"标的列表"`
  1055. List []*ArticleResearchResp
  1056. }
  1057. // 主题详情start
  1058. type GetThemeDetailListResp struct {
  1059. ArticleId int `description:"文章id"`
  1060. Title string `description:"标题"`
  1061. PublishDate string `description:"发布时间"`
  1062. SubjectName string `description:"标的名称"`
  1063. IndustrialSubjectId int `description:"标的id"`
  1064. DepartmentId int `description:"作者Id"`
  1065. NickName string `description:"作者昵称"`
  1066. Pv int `description:"PV"`
  1067. CollectNum int `description:"收藏人数"`
  1068. IndustrialManagementId int `description:"产业Id"`
  1069. IndustryName string `description:"产业名称"`
  1070. FllowNum int `description:"关注数量"`
  1071. MyCollectNum int `description:"本人是否收藏"`
  1072. IsCollect bool `description:"本人是否收藏"`
  1073. }
  1074. type GetThemeAericleListBuSubjectResp struct {
  1075. SubjectName string `description:"标的名称"`
  1076. List []*GetThemeAericleListResp
  1077. }
  1078. // 列表
  1079. func GetThemeDetail(userId, industrialManagementId int, condition string) (items []*ArticleListResp, err error) {
  1080. o := orm.NewOrm()
  1081. sql := `SELECT
  1082. a.article_id,
  1083. a.title,
  1084. a.body,
  1085. a.annotation,
  1086. a.abstract,
  1087. a.publish_date,
  1088. a.article_type_id,
  1089. d.nick_name,
  1090. d.department_id,
  1091. ( SELECT count( 1 ) FROM cygx_article_history_record_newpv AS h WHERE h.article_id = a.article_id ) AS pv,
  1092. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id ) AS collect_num,
  1093. ( SELECT count( 1 ) FROM cygx_article_collect AS ac WHERE ac.article_id = a.article_id and user_id = ? ) AS my_collect_num
  1094. FROM
  1095. cygx_article AS a
  1096. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  1097. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  1098. INNER JOIN cygx_article_department AS d ON d.department_id = a.department_id
  1099. WHERE
  1100. 1 = 1
  1101. AND m.industrial_management_id = ?
  1102. AND publish_status = 1 ` + condition + `
  1103. ORDER BY
  1104. publish_date DESC`
  1105. _, err = o.Raw(sql, userId, industrialManagementId).QueryRows(&items)
  1106. return
  1107. } //end
  1108. func GetDepartmentlistCount(condition string) (count int, err error) {
  1109. o := orm.NewOrm()
  1110. sql := `SELECT
  1111. count(*) AS count
  1112. FROM
  1113. (
  1114. SELECT
  1115. COUNT( 1 ) AS count
  1116. FROM
  1117. cygx_article_department AS d
  1118. INNER JOIN cygx_article AS a ON d.department_id = a.department_id
  1119. WHERE
  1120. 1 = 1
  1121. AND a.article_type_id > 0
  1122. AND publish_status = 1
  1123. GROUP BY
  1124. d.department_id
  1125. ) c `
  1126. err = o.Raw(sql).QueryRow(&count)
  1127. return
  1128. }
  1129. type IndustrialReadNum struct {
  1130. IndustrialManagementId int `description:"产业id"`
  1131. Readnum int `description:"阅读次数"`
  1132. }
  1133. // 获取该产业下文章的用户阅读次数-小红点用
  1134. func GetReportIndustrialReadNumList(userId int, industrialIds string, createtime time.Time) (items []*IndustrialReadNum, err error) {
  1135. o := orm.NewOrm()
  1136. sql := `SELECT a.industrial_management_id, MIN(a.readnum) AS readnum FROM (
  1137. SELECT man_g.industrial_management_id,( SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND rec.article_id = a.article_id ) AS readnum
  1138. FROM
  1139. cygx_article AS a
  1140. INNER JOIN cygx_industrial_article_group_management as man_g ON man_g.article_id = a.article_id
  1141. WHERE
  1142. a.publish_status = 1
  1143. AND a.is_class = 1
  1144. AND man_g.industrial_management_id IN (` + industrialIds + `)
  1145. AND a.publish_date > ?
  1146. GROUP BY a.article_id ORDER BY publish_date DESC
  1147. ) AS a GROUP BY industrial_management_id`
  1148. _, err = o.Raw(sql, createtime).QueryRows(&items)
  1149. return
  1150. }