industrial_management.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. package models
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "hongze/hongze_cygx/utils"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. type IndustrialManagementRep struct {
  11. IndustryName string `description:"产业名称"`
  12. IndustrialManagementId int `description:"产业id"`
  13. ChartPermissionId int `description:"权限id"`
  14. RecommendedIndex int `description:"推荐指数"`
  15. LayoutTime string `description:"布局时间"`
  16. ArticleReadNum int `description:"文章阅读数量"`
  17. IsResearch bool `description:"是否属于研选"`
  18. IsJump bool `description:"是否跳转"`
  19. IndustryNewLabel bool `description:"是否产业新标签"`
  20. }
  21. type IndustrialManagementCount struct {
  22. IndustrialManagementId int `orm:"column(industrial_management_id);pk" description:"产业id"`
  23. }
  24. // 获取产业置顶数量分类列表
  25. func GetIndustrialManagemenCountTop(sqlChartPermissionId string, uid int, condition string) (items []*IndustrialManagementCount, err error) {
  26. o := orm.NewOrm()
  27. sql := `SELECT
  28. man_g.industrial_management_id
  29. FROM
  30. cygx_industrial_article_group_management AS man_g
  31. INNER JOIN cygx_industrial_management as man ON man.industrial_management_id = man_g.industrial_management_id
  32. WHERE 1=1 ` + sqlChartPermissionId + `
  33. AND man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ? ) ` + condition + `
  34. GROUP BY
  35. man_g.industrial_management_id`
  36. _, err = o.Raw(sql, uid).QueryRows(&items)
  37. return
  38. }
  39. // 获取产业不置顶数量
  40. func GetIndustrialManagemenCountNoTop(sqlChartPermissionId string, uid int, condition string) (items []*IndustrialManagementCount, err error) {
  41. o := orm.NewOrm()
  42. sql := `SELECT
  43. man_g.industrial_management_id
  44. FROM
  45. cygx_industrial_article_group_management AS man_g
  46. INNER JOIN cygx_industrial_management as man ON man.industrial_management_id = man_g.industrial_management_id
  47. WHERE 1=1 ` + sqlChartPermissionId + `
  48. AND man_g.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ? ) ` + condition + `
  49. GROUP BY
  50. man_g.industrial_management_id`
  51. _, err = o.Raw(sql, uid).QueryRows(&items)
  52. return
  53. }
  54. // 产业列表
  55. func GetIndustrialManagementAll(uid int, condition, orderSrt string, startSize, pageSize int) (items []*IndustrialManagement, err error) {
  56. o := orm.NewOrm()
  57. sql := `SELECT
  58. man.*,re.chart_permission_name as permission_name,
  59. MAX(art.article_id ) AS article_id,
  60. man.new_art_publish_date AS update_time , MIN(art.publish_date) AS min_report_time,(
  61. SELECT COUNT( 1 ) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(uid) + ` AND rec.article_id = art.article_id ) AS readnum ,
  62. (SELECT COUNT( 1 ) FROM cygx_industry_fllow AS f WHERE f.user_id = ` + strconv.Itoa(uid) + ` AND f.industrial_management_id = man.industrial_management_id AND f.type = 1) AS is_follow
  63. FROM
  64. cygx_industrial_management AS man
  65. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  66. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  67. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  68. WHERE 1= 1
  69. AND re.report_type = 2
  70. AND art.is_report = 1
  71. AND art.is_class = 1 ` + condition + `
  72. GROUP BY
  73. man.industry_name
  74. ORDER BY ` + orderSrt + ` LIMIT ?,?`
  75. //AND man.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ` + strconv.Itoa(uid) + ` )
  76. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  77. return
  78. }
  79. // 产业列表
  80. func GetIndustrialManagementAllCount(condition string) (count int, err error) {
  81. o := orm.NewOrm()
  82. sql := `SELECT
  83. COUNT(*) as count
  84. FROM
  85. (SELECT
  86. COUNT(*)
  87. FROM
  88. cygx_industrial_management AS man
  89. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  90. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  91. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  92. WHERE
  93. 1 = 1
  94. AND re.report_type = 2
  95. AND art.is_report = 1
  96. AND art.is_class = 1 ` + condition + ` GROUP BY man.industrial_management_id) AS num `
  97. err = o.Raw(sql).QueryRow(&count)
  98. return
  99. }
  100. // 产业列表 -置顶
  101. func GetIndustrialManagementTopAll(uid int, condition string, startSize, pageSize int) (items []*IndustrialManagement, err error) {
  102. o := orm.NewOrm()
  103. sql := `SELECT
  104. man.*
  105. FROM
  106. cygx_industrial_management AS man
  107. INNER JOIN cygx_industry_top as top ON man.industrial_management_id = top.industrial_management_id
  108. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  109. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  110. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  111. WHERE 1=1
  112. AND top.user_id = ` + strconv.Itoa(uid) + `
  113. AND re.report_type = 2
  114. AND art.is_report = 1
  115. AND art.is_class = 1 ` + condition + `
  116. GROUP BY
  117. man.industry_name
  118. ORDER BY
  119. top.create_time DESC LIMIT ?,?`
  120. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  121. return
  122. }
  123. // 标的列表
  124. func GetIndustrialSubjectAll(IndustrialManagementId int) (items []*IndustrialSubject, err error) {
  125. o := orm.NewOrm()
  126. sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_management_id = ? `
  127. _, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
  128. return
  129. }
  130. // 标的列表
  131. func GetIndustrialSubjectAllByIndustrialId(industrialIdArr []int) (items []*IndustrialSubject, err error) {
  132. o := orm.NewOrm()
  133. sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_management_id IN (` + utils.GetOrmInReplace(len(industrialIdArr)) + `) `
  134. _, err = o.Raw(sql, industrialIdArr).QueryRows(&items)
  135. return
  136. }
  137. // 分析师列表
  138. func GetIndustrialAnalystAll(IndustrialManagementId int) (items []*IndustrialAnalyst, err error) {
  139. o := orm.NewOrm()
  140. sql := `SELECT * FROM cygx_industrial_analyst where industrial_management_id = ? `
  141. _, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
  142. return
  143. }
  144. // 获取产业数量
  145. func GetIndustrialManagementCount(IndustrialManagementId int) (count int, err error) {
  146. sqlCount := ` SELECT COUNT(1) AS count FROM cygx_industrial_management WHERE industrial_management_id=? `
  147. o := orm.NewOrm()
  148. err = o.Raw(sqlCount, IndustrialManagementId).QueryRow(&count)
  149. return
  150. }
  151. func GetIndustrialManagementDetail(industrialManagementId int) (items *IndustrialManagementRep, err error) {
  152. o := orm.NewOrm()
  153. sql := `SELECT * FROM cygx_industrial_management WHERE industrial_management_id = ?`
  154. err = o.Raw(sql, industrialManagementId).QueryRow(&items)
  155. return
  156. }
  157. // 获取该产业下最新的文章详情
  158. func GetIndustrialNewArticleDetail(industrialManagementId int) (item *ArticleDetail, err error) {
  159. o := orm.NewOrm()
  160. sql := `SELECT
  161. *
  162. FROM
  163. cygx_article
  164. WHERE
  165. article_id IN (
  166. SELECT
  167. article_id
  168. FROM
  169. cygx_industrial_article_group_management
  170. WHERE
  171. industrial_management_id = ?
  172. )
  173. AND is_class = 1 AND is_report = 1
  174. ORDER BY
  175. is_report DESC,
  176. publish_date DESC
  177. LIMIT 0,1`
  178. err = o.Raw(sql, industrialManagementId).QueryRow(&item)
  179. return
  180. }
  181. // 修改产业是否属于新标签
  182. func UpdateIndustrialIsNewLabel() (err error) {
  183. o := orm.NewOrm()
  184. resultTime := time.Now().AddDate(0, -2, 0).Format(utils.FormatDateTime)
  185. var condition string
  186. condition += ` AND is_hand_new_label = 0 AND create_time < ` + "'" + resultTime + "'"
  187. msql := " UPDATE cygx_industrial_management SET is_new_label = 0 WHERE 1 = 1 " + condition
  188. _, err = o.Raw(msql).Exec()
  189. return
  190. }
  191. type IndustrialManagementId struct {
  192. IndustrialManagementId string `description:"产业Id"`
  193. }
  194. // 获取归类产业报告数量大于10的
  195. func GetIndustrialMorethan10() (items []*IndustrialManagementId, err error) {
  196. o := orm.NewOrm()
  197. sql := `SELECT * FROM
  198. ( SELECT industrial_management_id, COUNT( 1 ) AS ca FROM cygx_industrial_article_group_management GROUP BY industrial_management_id ) AS na
  199. WHERE ca > 10 `
  200. _, err = o.Raw(sql).QueryRows(&items)
  201. return
  202. }
  203. // 修改产业是否属于深度标签
  204. func UpdateIndustrialIsDeepLabel(idStr string) (err error) {
  205. o := orm.NewOrm()
  206. msql := `UPDATE cygx_industrial_management
  207. SET is_deep_label = 1
  208. WHERE
  209. industrial_management_id IN (
  210. SELECT
  211. a.industrial_management_id
  212. FROM
  213. cygx_industrial_article_group_management AS a
  214. INNER JOIN cygx_article AS b ON b.id = a.cygx_article_id
  215. WHERE
  216. 1 = 1
  217. AND b.match_type_name = '行业深度'
  218. AND a.industrial_management_id IN ( ` + idStr + `)
  219. GROUP BY
  220. a.industrial_management_id)`
  221. _, err = o.Raw(msql).Exec()
  222. return
  223. }
  224. type IndustrialManagementIdInt struct {
  225. IndustrialManagementId int `description:"产业Id"`
  226. IndustryName string `description:"产业名称"`
  227. SubjectName string `description:"标的名称"`
  228. ArticleId int `description:"文章ID"`
  229. IsResearch bool `description:"是否属于研选"`
  230. ChartPermissionId int `description:"权限id"`
  231. }
  232. type IndustrialManagementIdInts struct {
  233. IndustrialManagementId int `description:"产业Id"`
  234. IndustryName string `description:"产业名称"`
  235. SubjectNames string `description:"标的名称"`
  236. ArticleId int `description:"文章ID"`
  237. IndustrialAndSubjectIds string `description:"关联标的以及产业ID"`
  238. }
  239. type IndustrialManagementIdName struct {
  240. DepartmentId int `description:"作者ID"`
  241. ArticleId int `description:"文章id"`
  242. IndustryName string `description:"产业名称"`
  243. SubjectName string `description:"标的名称"`
  244. IsReport string `description:"1观点,0纪要"`
  245. }
  246. // 获取归类产业报告数量大于10的
  247. func GetIndustrialManagementIds() (items []*IndustrialManagementIdInt, err error) {
  248. o := orm.NewOrm()
  249. //sql := `SELECT a.industrial_management_id FROM
  250. // cygx_industrial_management AS a
  251. // INNER JOIN cygx_industrial_subject as b ON b.industrial_management_id=a.industrial_management_id
  252. // WHERE b.industrial_subject_id > 0
  253. // GROUP BY a.industrial_management_id `
  254. sql := `SELECT industrial_management_id,industry_name FROM cygx_industrial_management `
  255. _, err = o.Raw(sql).QueryRows(&items)
  256. return
  257. }
  258. func GetcygxIndustrialSubject(industrialManagementId int) (items []*IndustrialSubject, err error) {
  259. o := orm.NewOrm()
  260. sql := `SELECT subject_name,industrial_subject_id FROM cygx_industrial_subject WHERE industrial_management_id = ?`
  261. _, err = o.Raw(sql, industrialManagementId).QueryRows(&items)
  262. return
  263. }
  264. // 通过名称获取
  265. func GetcygxIndustrialSubjectByName(name string) (industrial_management_id string, err error) {
  266. o := orm.NewOrm()
  267. sql := ` SELECT industrial_subject_id FROM cygx_industrial_subject WHERE subject_name = ?`
  268. err = o.Raw(sql, name).QueryRow(&industrial_management_id)
  269. return
  270. }
  271. func UpdateIndustrialManagementSubjectNames(nameStr string, industrialManagementId int) (err error) {
  272. o := orm.NewOrm()
  273. sql := `UPDATE cygx_industrial_management SET subject_names = ? WHERE industrial_management_id = ?`
  274. _, err = o.Raw(sql, nameStr, industrialManagementId).Exec()
  275. return
  276. }
  277. // 处理每个产业下所关联的文章的阅读量 start
  278. func IndustrialManagementAll() (items []*IndustrialManagement, err error) {
  279. o := orm.NewOrm()
  280. sql := `SELECT * FROM cygx_industrial_management `
  281. _, err = o.Raw(sql).QueryRows(&items)
  282. return
  283. }
  284. func GetIndustrialManagementArtCount(industrialManagementId int) (count int, err error) {
  285. sqlCount := ` SELECT COUNT(1) AS count
  286. FROM cygx_article_history_record_newpv AS h
  287. INNER JOIN cygx_industrial_article_group_management as mg ON mg.article_id = h.article_id
  288. WHERE mg.industrial_management_id = ? AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( h.create_time ) `
  289. o := orm.NewOrm()
  290. err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
  291. return
  292. }
  293. func UpdateIndustrialManagementArtReadNum(num, industrialManagementId int) (err error) {
  294. o := orm.NewOrm()
  295. sql := `UPDATE cygx_industrial_management SET article_read_num = ? WHERE industrial_management_id = ?`
  296. _, err = o.Raw(sql, num, industrialManagementId).Exec()
  297. return
  298. }
  299. // 更新产业布局时间
  300. func UpdateIndustrialManagementLayoutTime(layoutTime string, industrialManagementId int) (err error) {
  301. o := orm.NewOrm()
  302. sql := `UPDATE cygx_industrial_management SET layout_time = ? WHERE industrial_management_id = ?`
  303. _, err = o.Raw(sql, layoutTime, industrialManagementId).Exec()
  304. return
  305. }
  306. // 获取产业下阅读数量第三的产业详情
  307. func GetIndustrialManagementHot3(chartPermissionId int) (item *IndustrialManagementRep, err error) {
  308. o := orm.NewOrm()
  309. sql := `SELECT * FROM cygx_industrial_management WHERE chart_permission_id = ? ORDER BY article_read_num DESC LIMIT 2,1`
  310. err = o.Raw(sql, chartPermissionId).QueryRow(&item)
  311. return
  312. }
  313. // 获取产业关联标的的数量
  314. func GetIndustrialManagementSubjectCount(industrialManagementId int) (count int, err error) {
  315. sqlCount := ` SELECT COUNT(1) AS count FROM
  316. cygx_industrial_subject AS s
  317. INNER JOIN cygx_industrial_article_group_subject as sg ON sg.industrial_subject_id = s.industrial_subject_id
  318. INNER JOIN cygx_article as a ON a.article_id = sg.article_id
  319. WHERE a.industrial_management_id = ?
  320. AND a.publish_status = 1`
  321. o := orm.NewOrm()
  322. err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
  323. return
  324. }
  325. // 获取产业关联标的列表
  326. func GetIndustrialManagementSubjectList(articleId int) (items []*IndustrialSubject, err error) {
  327. o := orm.NewOrm()
  328. sql := `SELECT
  329. s.subject_name
  330. FROM
  331. cygx_industrial_subject AS s
  332. INNER JOIN cygx_industrial_article_group_subject AS sg ON sg.industrial_subject_id = s.industrial_subject_id
  333. INNER JOIN cygx_article AS a
  334. WHERE
  335. sg.article_id = ?
  336. AND a.publish_status = 1
  337. GROUP BY
  338. s.industrial_subject_id
  339. ORDER BY
  340. sg.id ASC
  341. LIMIT 4`
  342. _, err = o.Raw(sql, articleId).QueryRows(&items)
  343. return
  344. }
  345. type IndustrialManagementNewResp struct {
  346. IndustrialManagementId int `description:"产业Id"`
  347. IndustryName string `description:"产业名称"`
  348. IsHot bool `description:"是否是热门"`
  349. ArticleReadNum int `description:"文章阅读数量"`
  350. }
  351. type IndustrialManagementNewList struct {
  352. List []*IndustrialManagementNewResp
  353. }
  354. // 近期更新主题列表
  355. func GetIndustrialManagementNewList(condition string) (items []*IndustrialManagementNewResp, err error) {
  356. o := orm.NewOrm()
  357. sql := `SELECT
  358. m.industrial_management_id,
  359. m.industry_name,
  360. m.article_read_num,
  361. MAX( a.publish_date ) AS publish_date
  362. FROM
  363. cygx_article AS a
  364. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  365. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  366. WHERE
  367. 1 = 1
  368. AND a.article_type_id > 0
  369. AND publish_status = 1 ` + condition + `
  370. GROUP BY
  371. m.industrial_management_id
  372. ORDER BY
  373. publish_date DESC LIMIT 12`
  374. _, err = o.Raw(sql).QueryRows(&items)
  375. return
  376. }
  377. // 获取产业关联标的列表
  378. func GetIndustrialManagementForSubjecName(subjectName string, chartPermissionId int) (items []*IndustrialSubject, err error) {
  379. o := orm.NewOrm()
  380. sql := `SELECT s.subject_name,s.industrial_subject_id,m.industrial_management_id,m.industry_name,layout_time
  381. FROM cygx_industrial_subject as s
  382. INNER JOIN cygx_industrial_management as m ON m.industrial_management_id = s.industrial_management_id
  383. WHERE subject_name IN (` + subjectName + `) AND m.chart_permission_id = ? `
  384. _, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
  385. return
  386. }
  387. // 报告分类的新增与修改
  388. func ReportArticleClassificationEditNew(reportId int, industrialManagementIdStr string, articleId int, ndustrialSubjectIdStr string) (err error) {
  389. to, err := orm.NewOrm().Begin()
  390. if err != nil {
  391. return
  392. }
  393. defer func() {
  394. fmt.Println(err)
  395. if err == nil {
  396. to.Commit()
  397. } else {
  398. to.Rollback()
  399. }
  400. }()
  401. //修改文章是否过滤字段
  402. sql := `UPDATE cygx_article SET is_filter=0, is_class=1 WHERE article_id=? `
  403. _, err = to.Raw(sql, articleId).Exec()
  404. if err != nil {
  405. return
  406. }
  407. //删除文章关联标的
  408. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  409. fmt.Println(articleId)
  410. _, err = to.Raw(sql, articleId).Exec()
  411. if err != nil {
  412. return
  413. }
  414. //添加文章关联标的
  415. if ndustrialSubjectIdStr != "0" && ndustrialSubjectIdStr != "" {
  416. strList := strings.Split(ndustrialSubjectIdStr, ",")
  417. for _, v := range strList {
  418. sql := `INSERT INTO cygx_industrial_article_group_subject ( cygx_article_id, article_id, industrial_subject_id, create_time ) VALUES ( ?, ?, ?, ? )`
  419. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  420. if err != nil {
  421. return
  422. }
  423. }
  424. }
  425. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  426. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  427. _, err = to.Raw(sql, articleId).Exec()
  428. if err != nil {
  429. return
  430. }
  431. //添加文章关联行业
  432. industrialStrList := strings.Split(industrialManagementIdStr, ",")
  433. for _, v := range industrialStrList {
  434. sql = ` INSERT INTO cygx_industrial_article_group_management ( cygx_article_id, article_id, industrial_management_id, create_time ) VALUES ( ?, ?, ?, ? )`
  435. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  436. if err != nil {
  437. return
  438. }
  439. }
  440. return
  441. }
  442. // 通过标的名称获取相关联的活动ID
  443. func GetActivityIdListBySubjecName(subjectName string) (items []*ActivityIdRep, err error) {
  444. o := orm.NewOrm()
  445. sql := `SELECT * FROM cygx_industrial_activity_group_subject WHERE industrial_subject_id IN (SELECT industrial_subject_id FROM cygx_industrial_subject WHERE subject_name IN(` + subjectName + `) ) GROUP BY activity_id`
  446. _, err = o.Raw(sql).QueryRows(&items)
  447. return
  448. }
  449. // 产业关注榜
  450. func GetIndustrialManagementFllowBillboard(pars []interface{}, condition, orderSrt string, startSize, pageSize int) (items []*IndustrialManagement, err error) {
  451. o := orm.NewOrm()
  452. sql := `SELECT
  453. man.*
  454. FROM
  455. cygx_industrial_management AS man
  456. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  457. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  458. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  459. WHERE
  460. 1 = 1
  461. AND re.report_type = 2
  462. AND art.is_report = 1
  463. AND art.is_class = 1
  464. AND art.publish_status = 1 ` + condition + ` GROUP BY man.industrial_management_id ORDER BY ` + orderSrt + ` LIMIT ?,?`
  465. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  466. return
  467. }
  468. // 获取标的列表
  469. func GetSubjectList(pars []interface{}, condition string) (items []*IndustrialManagementIdInt, err error) {
  470. o := orm.NewOrm()
  471. sql := `SELECT
  472. subject_name,
  473. s.industrial_management_id
  474. FROM
  475. cygx_industrial_subject AS s
  476. INNER JOIN cygx_industrial_article_group_subject AS sg ON sg.industrial_subject_id = s.industrial_subject_id
  477. WHERE
  478. 1 = 1 ` + condition + `
  479. GROUP BY
  480. s.industrial_subject_id`
  481. _, err = o.Raw(sql, pars).QueryRows(&items)
  482. return
  483. }
  484. // 获取标的列表
  485. func GetIndustrialListByarticleId(pars []interface{}, condition string) (items []*IndustrialManagementIdInt, err error) {
  486. o := orm.NewOrm()
  487. sql := `SELECT
  488. mg.article_id,
  489. m.industry_name,
  490. mg.industrial_management_id
  491. FROM
  492. cygx_industrial_management AS m
  493. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
  494. WHERE
  495. 1 = 1 ` + condition + ` GROUP BY mg.article_id, mg.industrial_management_id `
  496. _, err = o.Raw(sql, pars).QueryRows(&items)
  497. return
  498. }
  499. // 修改产业关注数量
  500. func UpdateIndustrialManagementFllowNum(num, industrialManagementId int) (err error) {
  501. o := orm.NewOrm()
  502. sql := `UPDATE cygx_industrial_management SET user_fllow_num = ? WHERE industrial_management_id = ?`
  503. _, err = o.Raw(sql, num, industrialManagementId).Exec()
  504. return
  505. }
  506. // 通过id 获取详情
  507. func GetIndustrialManagemenDetailByAaticleID(articleId int) (items []*IndustrialManagementRep, err error) {
  508. o := orm.NewOrm()
  509. sql := `SELECT
  510. article_id,
  511. m.industrial_management_id,
  512. industry_name
  513. FROM
  514. cygx_industrial_article_group_management AS mg
  515. INNER JOIN cygx_industrial_management AS m ON mg.industrial_management_id = m.industrial_management_id
  516. WHERE
  517. mg.article_id = ? GROUP BY mg.industrial_management_id `
  518. _, err = o.Raw(sql, articleId).QueryRows(&items)
  519. return
  520. }
  521. // 获取所有的产业
  522. func GetindustrialManagement() (items []*IndustrialManagementRep, err error) {
  523. o := orm.NewOrm()
  524. sql := `SELECT
  525. i.*
  526. FROM
  527. cygx_industrial_management AS i
  528. INNER JOIN cygx_industrial_article_group_management AS m ON m.industrial_management_id = i.industrial_management_id
  529. GROUP BY
  530. i.industrial_management_id `
  531. _, err = o.Raw(sql).QueryRows(&items)
  532. return
  533. }
  534. // GetActiveArticleIndustryIds 获取有已归类行业报告的行业IDs
  535. func GetActiveArticleIndustryIds() (ids []int, err error) {
  536. sql := `SELECT
  537. man.industrial_management_id
  538. FROM
  539. cygx_industrial_management AS man
  540. JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  541. JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  542. JOIN cygx_article AS art ON art.article_id = man_g.article_id
  543. WHERE
  544. 1 = 1 AND re.report_type = 2 AND art.is_report = 1 AND art.is_class = 1 AND art.publish_status = 1
  545. GROUP BY
  546. man.industrial_management_id`
  547. _, err = orm.NewOrm().Raw(sql).QueryRows(&ids)
  548. return
  549. }
  550. // GetTopOneMonthArtReadNumIndustry 获取近一个月报告阅读数量最多的产业信息
  551. func GetTopOneMonthArtReadNumIndustry(condition string, pars []interface{}) (item *IndustrialManagement, err error) {
  552. sql := `SELECT * FROM cygx_industrial_management WHERE 1 = 1 `
  553. if condition != `` {
  554. sql += condition
  555. }
  556. sql += ` ORDER BY article_read_num DESC LIMIT 1`
  557. err = orm.NewOrm().Raw(sql, pars).QueryRow(&item)
  558. return
  559. }
  560. // GetSourceIndustryByName 通过名称获取资源包产业
  561. func GetSourceIndustryByName(industryName string) (item *IndustrialManagement, err error) {
  562. sql := `SELECT
  563. m.industry_name,
  564. m.industrial_management_id,
  565. m.chart_permission_id
  566. FROM
  567. cygx_industrial_management AS m
  568. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = m.industrial_management_id
  569. INNER JOIN cygx_article AS a ON a.article_id = mg.article_id AND a.article_type != 'lyjh'
  570. WHERE
  571. 1 = 1 AND m.industry_name = ? AND a.publish_status = 1 AND a.article_id < 1000000
  572. GROUP BY
  573. m.industrial_management_id`
  574. err = orm.NewOrm().Raw(sql, industryName).QueryRow(&item)
  575. return
  576. }
  577. // GetIndustryByName 通过名称获取产业
  578. func GetIndustryByName(industryName string) (item *IndustrialManagement, err error) {
  579. sql := `SELECT * FROM cygx_industrial_management WHERE industry_name = ? LIMIT 1`
  580. err = orm.NewOrm().Raw(sql, industryName).QueryRow(&item)
  581. return
  582. }
  583. type IndustrialManagementArticle struct {
  584. IndustrialManagementId int `description:"产业Id"`
  585. IndustryName string `description:"产业名称"`
  586. ArticleId int `description:"文章ID"`
  587. PublishDate string `description:"发布时间"`
  588. }
  589. // 时间线的更新时间
  590. func GetTimeLineReportIndustrialPublishdateList(industrialIdArr []int) (items []*IndustrialManagementArticle, err error) {
  591. o := orm.NewOrm()
  592. sql := `SELECT
  593. mmc.id,
  594. 0,
  595. mmc.industry_id AS industrial_management_id,
  596. mmc.content AS title,
  597. MAX( mm.meeting_time ) AS publish_date
  598. FROM
  599. cygx_morning_meeting_review_chapter AS mmc
  600. INNER JOIN cygx_morning_meeting_reviews AS mm
  601. WHERE
  602. mm.id = mmc.meeting_id
  603. AND mm.STATUS = 1
  604. AND mmc.industry_id IN (` + utils.GetOrmInReplace(len(industrialIdArr)) + `)
  605. GROUP BY industrial_management_id ORDER BY publish_date DESC `
  606. _, err = o.Raw(sql, industrialIdArr).QueryRows(&items)
  607. return
  608. }
  609. // 获取该产业下最新的文章详情
  610. func GetNewArticleDetailByIndustrialIds(industrialIdArr []int) (items []*IndustrialManagementArticle, err error) {
  611. arrLen := len(industrialIdArr)
  612. if arrLen == 0 {
  613. return
  614. }
  615. o := orm.NewOrm()
  616. sql := `SELECT
  617. mg.industrial_management_id,
  618. MAX( a.article_id ) AS article_id,
  619. a.title,
  620. MAX( a.publish_date ) AS publish_date
  621. FROM
  622. cygx_industrial_article_group_management AS mg
  623. INNER JOIN cygx_article AS a ON mg.article_id = a.article_id
  624. WHERE
  625. 1 = 1
  626. AND a.is_report = 1
  627. AND a.is_class = 1
  628. AND mg.industrial_management_id IN(` + utils.GetOrmInReplace(len(industrialIdArr)) + `)
  629. GROUP BY
  630. mg.industrial_management_id `
  631. _, err = o.Raw(sql, industrialIdArr).QueryRows(&items)
  632. return
  633. }
  634. // GetIndustrialManagementArticleNewPublishData 获取产业关联文章的最新发布时间
  635. func GetIndustrialManagementArticleNewPublishData() (items []*IndustrialManagement, err error) {
  636. o := orm.NewOrm()
  637. sql := `SELECT
  638. man.industrial_management_id,
  639. MAX( art.publish_date ) AS update_time
  640. FROM
  641. cygx_industrial_management AS man
  642. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  643. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  644. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  645. WHERE
  646. 1 = 1
  647. AND re.report_type = 2
  648. AND art.is_report = 1
  649. AND art.is_class = 1
  650. GROUP BY
  651. man.industry_name
  652. ORDER BY
  653. update_time DESC`
  654. _, err = o.Raw(sql).QueryRows(&items)
  655. return
  656. }
  657. // UpdateIndustrialManagementArticleNewPublishData 批量修改获取产业关联文章的最新发布时间
  658. func UpdateIndustrialManagementArticleNewPublishData(items map[int]string) (err error) {
  659. o := orm.NewOrm()
  660. p, err := o.Raw("UPDATE cygx_industrial_management SET new_art_publish_date = ? WHERE industrial_management_id = ?").Prepare()
  661. if err != nil {
  662. return
  663. }
  664. defer func() {
  665. _ = p.Close() // 别忘记关闭 statement
  666. }()
  667. for k, v := range items {
  668. _, err = p.Exec(v, k)
  669. if err != nil {
  670. return
  671. }
  672. }
  673. return
  674. }