industrial_management.go 14 KB

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