report.go 39 KB

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