industrial_management.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  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. ChartPermissionId int `description:"权限id"`
  13. RecommendedIndex int `description:"推荐指数"`
  14. LayoutTime string `description:"布局时间"`
  15. ArticleReadNum int `description:"文章阅读数量"`
  16. }
  17. type IndustrialManagementCount struct {
  18. IndustrialManagementId int `orm:"column(industrial_management_id);pk" description:"产业id"`
  19. }
  20. //获取产业置顶数量分类列表
  21. func GetIndustrialManagemenCountTop(sqlChartPermissionId string, uid int, condition string) (items []*IndustrialManagementCount, err error) {
  22. o := orm.NewOrm()
  23. sql := `SELECT
  24. man_g.industrial_management_id
  25. FROM
  26. cygx_industrial_article_group_management AS man_g
  27. INNER JOIN cygx_industrial_management as man ON man.industrial_management_id = man_g.industrial_management_id
  28. WHERE 1=1 ` + sqlChartPermissionId + `
  29. AND man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ? ) ` + condition + `
  30. GROUP BY
  31. man_g.industrial_management_id`
  32. _, err = o.Raw(sql, uid).QueryRows(&items)
  33. return
  34. }
  35. //获取产业不置顶数量
  36. func GetIndustrialManagemenCountNoTop(sqlChartPermissionId string, uid int, condition string) (items []*IndustrialManagementCount, err error) {
  37. o := orm.NewOrm()
  38. sql := `SELECT
  39. man_g.industrial_management_id
  40. FROM
  41. cygx_industrial_article_group_management AS man_g
  42. INNER JOIN cygx_industrial_management as man ON man.industrial_management_id = man_g.industrial_management_id
  43. WHERE 1=1 ` + sqlChartPermissionId + `
  44. AND man_g.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ? ) ` + condition + `
  45. GROUP BY
  46. man_g.industrial_management_id`
  47. _, err = o.Raw(sql, uid).QueryRows(&items)
  48. return
  49. }
  50. //产业列表
  51. func GetIndustrialManagementAll(uid int, condition, orderSrt string, startSize, pageSize int) (items []*IndustrialManagement, err error) {
  52. o := orm.NewOrm()
  53. sql := `SELECT
  54. man.*,
  55. MAX( art.publish_date ) AS update_time ,(
  56. 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 ,
  57. (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
  58. FROM
  59. cygx_industrial_management AS man
  60. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  61. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  62. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  63. WHERE 1= 1
  64. AND re.report_type = 2
  65. AND art.is_report = 1
  66. AND art.is_class = 1 ` + condition + `
  67. GROUP BY
  68. man.industry_name
  69. ORDER BY ` + orderSrt + ` LIMIT ?,?`
  70. //AND man.industrial_management_id NOT IN ( SELECT industrial_management_id FROM cygx_industry_top WHERE user_id = ` + strconv.Itoa(uid) + ` )
  71. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  72. return
  73. }
  74. //产业列表
  75. func GetIndustrialManagementAllCount(condition string) (count int, err error) {
  76. o := orm.NewOrm()
  77. sql := `SELECT
  78. COUNT(*) as count
  79. FROM
  80. (SELECT
  81. COUNT(*)
  82. FROM
  83. cygx_industrial_management AS man
  84. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  85. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  86. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  87. WHERE
  88. 1 = 1
  89. AND re.report_type = 2
  90. AND art.is_report = 1
  91. AND art.is_class = 1 ` + condition + ` GROUP BY man.industrial_management_id) AS num `
  92. err = o.Raw(sql).QueryRow(&count)
  93. return
  94. }
  95. //产业列表 -置顶
  96. func GetIndustrialManagementTopAll(uid int, condition string, startSize, pageSize int) (items []*IndustrialManagement, err error) {
  97. o := orm.NewOrm()
  98. sql := `SELECT
  99. man.*
  100. FROM
  101. cygx_industrial_management AS man
  102. INNER JOIN cygx_industry_top as top ON man.industrial_management_id = top.industrial_management_id
  103. INNER JOIN cygx_report_mapping AS re ON re.chart_permission_id = man.chart_permission_id
  104. INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.industrial_management_id = man.industrial_management_id
  105. INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id
  106. WHERE 1=1
  107. AND top.user_id = ` + strconv.Itoa(uid) + `
  108. AND re.report_type = 2
  109. AND art.is_report = 1
  110. AND art.is_class = 1 ` + condition + `
  111. GROUP BY
  112. man.industry_name
  113. ORDER BY
  114. top.create_time DESC LIMIT ?,?`
  115. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
  116. return
  117. }
  118. //标的列表
  119. func GetIndustrialSubjectAll(IndustrialManagementId int) (items []*IndustrialSubject, err error) {
  120. o := orm.NewOrm()
  121. sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_management_id = ? `
  122. _, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
  123. return
  124. }
  125. //分析师列表
  126. func GetIndustrialAnalystAll(IndustrialManagementId int) (items []*IndustrialAnalyst, err error) {
  127. o := orm.NewOrm()
  128. sql := `SELECT * FROM cygx_industrial_analyst where industrial_management_id = ? `
  129. _, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
  130. return
  131. }
  132. //获取产业数量
  133. func GetIndustrialManagementCount(IndustrialManagementId int) (count int, err error) {
  134. sqlCount := ` SELECT COUNT(1) AS count FROM cygx_industrial_management WHERE industrial_management_id=? `
  135. o := orm.NewOrm()
  136. err = o.Raw(sqlCount, IndustrialManagementId).QueryRow(&count)
  137. return
  138. }
  139. func GetIndustrialManagementDetail(industrialManagementId int) (items *IndustrialManagementRep, err error) {
  140. o := orm.NewOrm()
  141. sql := `SELECT * FROM cygx_industrial_management WHERE industrial_management_id = ?`
  142. err = o.Raw(sql, industrialManagementId).QueryRow(&items)
  143. return
  144. }
  145. //获取该产业下最新的文章详情
  146. func GetIndustrialNewArticleDetail(industrialManagementId int) (item *ArticleDetail, err error) {
  147. o := orm.NewOrm()
  148. sql := `SELECT
  149. *
  150. FROM
  151. cygx_article
  152. WHERE
  153. article_id IN ( SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id = ? )
  154. ORDER BY
  155. is_report DESC,
  156. publish_date DESC
  157. LIMIT 0,1`
  158. err = o.Raw(sql, industrialManagementId).QueryRow(&item)
  159. return
  160. }
  161. //修改产业是否属于新标签
  162. func UpdateIndustrialIsNewLabel() (err error) {
  163. o := orm.NewOrm()
  164. resultTime := time.Now().AddDate(0, -2, 0).Format(utils.FormatDateTime)
  165. var condition string
  166. condition += ` AND is_hand_new_label = 0 AND create_time < ` + "'" + resultTime + "'"
  167. msql := " UPDATE cygx_industrial_management SET is_new_label = 0 WHERE 1 = 1 " + condition
  168. _, err = o.Raw(msql).Exec()
  169. return
  170. }
  171. type IndustrialManagementId struct {
  172. IndustrialManagementId string `description:"产业Id"`
  173. }
  174. //获取归类产业报告数量大于10的
  175. func GetIndustrialMorethan10() (items []*IndustrialManagementId, err error) {
  176. o := orm.NewOrm()
  177. sql := `SELECT * FROM
  178. ( SELECT industrial_management_id, COUNT( 1 ) AS ca FROM cygx_industrial_article_group_management GROUP BY industrial_management_id ) AS na
  179. WHERE ca > 10 `
  180. _, err = o.Raw(sql).QueryRows(&items)
  181. return
  182. }
  183. //修改产业是否属于深度标签
  184. func UpdateIndustrialIsDeepLabel(idStr string) (err error) {
  185. o := orm.NewOrm()
  186. msql := `UPDATE cygx_industrial_management
  187. SET is_deep_label = 1
  188. WHERE
  189. industrial_management_id IN (
  190. SELECT
  191. a.industrial_management_id
  192. FROM
  193. cygx_industrial_article_group_management AS a
  194. INNER JOIN cygx_article AS b ON b.id = a.cygx_article_id
  195. WHERE
  196. 1 = 1
  197. AND b.match_type_name = '行业深度'
  198. AND a.industrial_management_id IN ( ` + idStr + `)
  199. GROUP BY
  200. a.industrial_management_id)`
  201. _, err = o.Raw(msql).Exec()
  202. return
  203. }
  204. type IndustrialManagementIdInt struct {
  205. IndustrialManagementId int `description:"产业Id"`
  206. IndustryName string `description:"产业名称"`
  207. SubjectName string `description:"标的名称"`
  208. ArticleId int `description:"文章ID"`
  209. }
  210. type IndustrialManagementIdInts struct {
  211. IndustrialManagementId int `description:"产业Id"`
  212. IndustryName string `description:"产业名称"`
  213. SubjectNames string `description:"标的名称"`
  214. ArticleId int `description:"文章ID"`
  215. IndustrialAndSubjectIds string `description:"关联标的以及产业ID"`
  216. }
  217. type IndustrialManagementIdName struct {
  218. DepartmentId int `description:"作者ID"`
  219. ArticleId int `description:"文章id"`
  220. IndustryName string `description:"产业名称"`
  221. SubjectName string `description:"标的名称"`
  222. IsReport string `description:"1观点,0纪要"`
  223. }
  224. //获取归类产业报告数量大于10的
  225. func GetIndustrialManagementIds() (items []*IndustrialManagementIdInt, err error) {
  226. o := orm.NewOrm()
  227. //sql := `SELECT a.industrial_management_id FROM
  228. // cygx_industrial_management AS a
  229. // INNER JOIN cygx_industrial_subject as b ON b.industrial_management_id=a.industrial_management_id
  230. // WHERE b.industrial_subject_id > 0
  231. // GROUP BY a.industrial_management_id `
  232. sql := `SELECT industrial_management_id,industry_name FROM cygx_industrial_management `
  233. _, err = o.Raw(sql).QueryRows(&items)
  234. return
  235. }
  236. func GetcygxIndustrialSubject(industrialManagementId int) (items []*IndustrialSubject, err error) {
  237. o := orm.NewOrm()
  238. sql := `SELECT subject_name FROM cygx_industrial_subject WHERE industrial_management_id = ?`
  239. _, err = o.Raw(sql, industrialManagementId).QueryRows(&items)
  240. return
  241. }
  242. //通过名称获取
  243. func GetcygxIndustrialSubjectByName(name string) (industrial_management_id string, err error) {
  244. o := orm.NewOrm()
  245. sql := ` SELECT industrial_subject_id FROM cygx_industrial_subject WHERE subject_name = ?`
  246. err = o.Raw(sql, name).QueryRow(&industrial_management_id)
  247. return
  248. }
  249. func UpdateIndustrialManagementSubjectNames(nameStr string, industrialManagementId int) (err error) {
  250. o := orm.NewOrm()
  251. sql := `UPDATE cygx_industrial_management SET subject_names = ? WHERE industrial_management_id = ?`
  252. _, err = o.Raw(sql, nameStr, industrialManagementId).Exec()
  253. return
  254. }
  255. // 处理每个产业下所关联的文章的阅读量 start
  256. func IndustrialManagementAll() (items []*IndustrialManagement, err error) {
  257. o := orm.NewOrm()
  258. sql := `SELECT * FROM cygx_industrial_management `
  259. _, err = o.Raw(sql).QueryRows(&items)
  260. return
  261. }
  262. func GetIndustrialManagementArtCount(industrialManagementId int) (count int, err error) {
  263. sqlCount := ` SELECT COUNT(1) AS count
  264. FROM cygx_article_history_record AS h
  265. INNER JOIN cygx_industrial_article_group_management as mg ON mg.article_id = h.article_id
  266. WHERE mg.industrial_management_id = ? AND DATE_SUB( CURDATE(), INTERVAL 30 DAY ) <= date( h.create_time ) `
  267. o := orm.NewOrm()
  268. err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
  269. return
  270. }
  271. func UpdateIndustrialManagementArtReadNum(num, industrialManagementId int) (err error) {
  272. o := orm.NewOrm()
  273. sql := `UPDATE cygx_industrial_management SET article_read_num = ? WHERE industrial_management_id = ?`
  274. _, err = o.Raw(sql, num, industrialManagementId).Exec()
  275. return
  276. }
  277. //获取产业下阅读数量第三的产业详情
  278. func GetIndustrialManagementHot3(chartPermissionId int) (item *IndustrialManagementRep, err error) {
  279. o := orm.NewOrm()
  280. sql := `SELECT * FROM cygx_industrial_management WHERE chart_permission_id = ? ORDER BY article_read_num DESC LIMIT 2,1`
  281. err = o.Raw(sql, chartPermissionId).QueryRow(&item)
  282. return
  283. }
  284. //获取产业关联标的的数量
  285. func GetIndustrialManagementSubjectCount(industrialManagementId int) (count int, err error) {
  286. sqlCount := ` SELECT COUNT(1) AS count FROM
  287. cygx_industrial_subject AS s
  288. INNER JOIN cygx_industrial_article_group_subject as sg ON sg.industrial_subject_id = s.industrial_subject_id
  289. INNER JOIN cygx_article as a ON a.article_id = sg.article_id
  290. WHERE a.industrial_management_id = ?
  291. AND a.publish_status = 1`
  292. o := orm.NewOrm()
  293. err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
  294. return
  295. }
  296. //获取产业关联标的列表
  297. func GetIndustrialManagementSubjectList(articleId int) (items []*IndustrialSubject, err error) {
  298. o := orm.NewOrm()
  299. sql := `SELECT
  300. s.subject_name
  301. FROM
  302. cygx_industrial_subject AS s
  303. INNER JOIN cygx_industrial_article_group_subject AS sg ON sg.industrial_subject_id = s.industrial_subject_id
  304. INNER JOIN cygx_article AS a
  305. WHERE
  306. sg.article_id = ?
  307. AND a.publish_status = 1
  308. GROUP BY
  309. s.industrial_subject_id
  310. ORDER BY
  311. sg.id ASC
  312. LIMIT 4`
  313. _, err = o.Raw(sql, articleId).QueryRows(&items)
  314. return
  315. }
  316. type IndustrialManagementNewResp struct {
  317. IndustrialManagementId int `description:"产业Id"`
  318. IndustryName string `description:"产业名称"`
  319. IsHot bool `description:"是否是热门"`
  320. ArticleReadNum int `description:"文章阅读数量"`
  321. }
  322. type IndustrialManagementNewList struct {
  323. List []*IndustrialManagementNewResp
  324. }
  325. //近期更新主题列表
  326. func GetIndustrialManagementNewList(permissionName string) (items []*IndustrialManagementNewResp, err error) {
  327. o := orm.NewOrm()
  328. sql := `SELECT
  329. m.industrial_management_id,
  330. m.industry_name,
  331. m.article_read_num,
  332. MAX( a.publish_date ) AS publish_date
  333. FROM
  334. cygx_article AS a
  335. INNER JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
  336. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  337. WHERE
  338. 1 = 1
  339. AND a.category_name LIKE '%` + permissionName + `%'
  340. AND publish_status = 1
  341. GROUP BY
  342. m.industrial_management_id
  343. ORDER BY
  344. publish_date DESC LIMIT 12`
  345. _, err = o.Raw(sql).QueryRows(&items)
  346. return
  347. }
  348. //获取产业关联标的列表
  349. func GetIndustrialManagementForSubjecName(subjectName string, chartPermissionId int) (items []*IndustrialSubject, err error) {
  350. o := orm.NewOrm()
  351. sql := `SELECT s.subject_name,s.industrial_subject_id,m.industrial_management_id,m.industry_name
  352. FROM cygx_industrial_subject as s
  353. INNER JOIN cygx_industrial_management as m ON m.industrial_management_id = s.industrial_management_id
  354. WHERE subject_name IN (` + subjectName + `) AND m.chart_permission_id = ? `
  355. _, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
  356. return
  357. }
  358. //报告分类的新增与修改
  359. func ReportArticleClassificationEditNew(reportId int, industrialManagementIdStr string, articleId int, ndustrialSubjectIdStr string) (err error) {
  360. to, err := orm.NewOrm().Begin()
  361. if err != nil {
  362. return
  363. }
  364. defer func() {
  365. fmt.Println(err)
  366. if err == nil {
  367. to.Commit()
  368. } else {
  369. to.Rollback()
  370. }
  371. }()
  372. //修改文章是否过滤字段
  373. sql := `UPDATE cygx_article SET is_filter=0, is_class=1 WHERE article_id=? `
  374. _, err = to.Raw(sql, articleId).Exec()
  375. if err != nil {
  376. return
  377. }
  378. //删除文章关联标的
  379. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  380. fmt.Println(articleId)
  381. _, err = to.Raw(sql, articleId).Exec()
  382. if err != nil {
  383. return
  384. }
  385. //添加文章关联标的
  386. if ndustrialSubjectIdStr != "0" && ndustrialSubjectIdStr != "" {
  387. strList := strings.Split(ndustrialSubjectIdStr, ",")
  388. for _, v := range strList {
  389. sql := `INSERT INTO cygx_industrial_article_group_subject ( cygx_article_id, article_id, industrial_subject_id, create_time ) VALUES ( ?, ?, ?, ? )`
  390. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  391. if err != nil {
  392. return
  393. }
  394. }
  395. }
  396. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  397. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  398. _, err = to.Raw(sql, articleId).Exec()
  399. if err != nil {
  400. return
  401. }
  402. //添加文章关联行业
  403. industrialStrList := strings.Split(industrialManagementIdStr, ",")
  404. for _, v := range industrialStrList {
  405. sql = ` INSERT INTO cygx_industrial_article_group_management ( cygx_article_id, article_id, industrial_management_id, create_time ) VALUES ( ?, ?, ?, ? )`
  406. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  407. if err != nil {
  408. return
  409. }
  410. }
  411. return
  412. }
  413. //通过标的名称获取相关联的活动ID
  414. func GetActivityIdListBySubjecName(subjectName string) (items []*ActivityIdRep, err error) {
  415. o := orm.NewOrm()
  416. 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`
  417. _, err = o.Raw(sql).QueryRows(&items)
  418. return
  419. }