industrial_management.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. package models
  2. import (
  3. "hongze/hongze_cygx/utils"
  4. "rdluck_tools/orm"
  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. publish_date DESC
  154. LIMIT 0,1`
  155. err = o.Raw(sql, industrialManagementId).QueryRow(&item)
  156. return
  157. }
  158. //修改产业是否属于新标签
  159. func UpdateIndustrialIsNewLabel() (err error) {
  160. o := orm.NewOrm()
  161. resultTime := time.Now().AddDate(0, -2, 0).Format(utils.FormatDateTime)
  162. var condition string
  163. condition += ` AND is_hand_new_label = 0 AND create_time < ` + "'" + resultTime + "'"
  164. msql := " UPDATE cygx_industrial_management SET is_new_label = 0 WHERE 1 = 1 " + condition
  165. _, err = o.Raw(msql).Exec()
  166. return
  167. }
  168. type IndustrialManagementId struct {
  169. IndustrialManagementId string `description:"产业Id"`
  170. }
  171. //获取归类产业报告数量大于10的
  172. func GetIndustrialMorethan10() (items []*IndustrialManagementId, err error) {
  173. o := orm.NewOrm()
  174. sql := `SELECT * FROM
  175. ( SELECT industrial_management_id, COUNT( 1 ) AS ca FROM cygx_industrial_article_group_management GROUP BY industrial_management_id ) AS na
  176. WHERE ca > 10 `
  177. _, err = o.Raw(sql).QueryRows(&items)
  178. return
  179. }
  180. //修改产业是否属于深度标签
  181. func UpdateIndustrialIsDeepLabel(idStr string) (err error) {
  182. o := orm.NewOrm()
  183. msql := `UPDATE cygx_industrial_management
  184. SET is_deep_label = 1
  185. WHERE
  186. industrial_management_id IN (
  187. SELECT
  188. industrial_management_id
  189. FROM
  190. cygx_industrial_article_group_management AS a
  191. INNER JOIN cygx_article AS b ON b.id = a.cygx_article_id
  192. WHERE
  193. 1 = 1
  194. AND b.match_type_name = '行业深度'
  195. AND a.industrial_management_id IN ( ` + idStr + `)
  196. AND is_hand_deep_label = 0
  197. GROUP BY
  198. a.industrial_management_id)`
  199. _, err = o.Raw(msql).Exec()
  200. return
  201. }
  202. type IndustrialManagementIdInt struct {
  203. IndustrialManagementId int `description:"产业Id"`
  204. IndustryName string `description:"产业名称"`
  205. SubjectName string `description:"标的名称"`
  206. ArticleId int `description:"文章ID"`
  207. }
  208. type IndustrialManagementIdInts struct {
  209. IndustrialManagementId int `description:"产业Id"`
  210. IndustryName string `description:"产业名称"`
  211. SubjectNames string `description:"标的名称"`
  212. ArticleId int `description:"文章ID"`
  213. IndustrialAndSubjectIds string `description:"关联标的以及产业ID"`
  214. }
  215. type IndustrialManagementIdName struct {
  216. DepartmentId int `description:"作者ID"`
  217. ArticleId int `description:"文章id"`
  218. IndustryName string `description:"产业名称"`
  219. SubjectName string `description:"标的名称"`
  220. IsReport string `description:"1观点,0纪要"`
  221. }
  222. //获取归类产业报告数量大于10的
  223. func GetIndustrialManagementIds() (items []*IndustrialManagementIdInt, err error) {
  224. o := orm.NewOrm()
  225. //sql := `SELECT a.industrial_management_id FROM
  226. // cygx_industrial_management AS a
  227. // INNER JOIN cygx_industrial_subject as b ON b.industrial_management_id=a.industrial_management_id
  228. // WHERE b.industrial_subject_id > 0
  229. // GROUP BY a.industrial_management_id `
  230. sql := `SELECT industrial_management_id,industry_name FROM cygx_industrial_management `
  231. _, err = o.Raw(sql).QueryRows(&items)
  232. return
  233. }
  234. func GetcygxIndustrialSubject(industrialManagementId int) (items []*IndustrialSubject, err error) {
  235. o := orm.NewOrm()
  236. sql := `SELECT subject_name FROM cygx_industrial_subject WHERE industrial_management_id = ?`
  237. _, err = o.Raw(sql, industrialManagementId).QueryRows(&items)
  238. return
  239. }
  240. func UpdateIndustrialManagementSubjectNames(nameStr string, industrialManagementId int) (err error) {
  241. o := orm.NewOrm()
  242. sql := `UPDATE cygx_industrial_management SET subject_names = ? WHERE industrial_management_id = ?`
  243. _, err = o.Raw(sql, nameStr, industrialManagementId).Exec()
  244. return
  245. }
  246. // 处理每个产业下所关联的文章的阅读量 start
  247. func IndustrialManagementAll() (items []*IndustrialManagement, err error) {
  248. o := orm.NewOrm()
  249. sql := `SELECT * FROM cygx_industrial_management `
  250. _, err = o.Raw(sql).QueryRows(&items)
  251. return
  252. }
  253. func GetIndustrialManagementArtCount(industrialManagementId int) (count int, err error) {
  254. sqlCount := ` SELECT COUNT(1) AS count
  255. FROM cygx_article_history_record AS h
  256. INNER JOIN cygx_industrial_article_group_management as mg ON mg.article_id = h.article_id
  257. WHERE mg.industrial_management_id = ?`
  258. o := orm.NewOrm()
  259. err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
  260. return
  261. }
  262. func UpdateIndustrialManagementArtReadNum(num, industrialManagementId int) (err error) {
  263. o := orm.NewOrm()
  264. sql := `UPDATE cygx_industrial_management SET article_read_num = ? WHERE industrial_management_id = ?`
  265. _, err = o.Raw(sql, num, industrialManagementId).Exec()
  266. return
  267. }
  268. //获取产业下阅读数量第三的产业详情
  269. func GetIndustrialManagementHot3(chartPermissionId int) (item *IndustrialManagementRep, err error) {
  270. o := orm.NewOrm()
  271. sql := `SELECT * FROM cygx_industrial_management WHERE chart_permission_id = ? ORDER BY article_read_num DESC LIMIT 2,1`
  272. err = o.Raw(sql, chartPermissionId).QueryRow(&item)
  273. return
  274. }
  275. //获取产业关联标的的数量
  276. func GetIndustrialManagementSubjectCount(industrialManagementId int) (count int, err error) {
  277. sqlCount := ` SELECT COUNT(1) AS count FROM
  278. cygx_industrial_subject AS s
  279. INNER JOIN cygx_industrial_article_group_subject as sg ON sg.industrial_subject_id = s.industrial_subject_id
  280. INNER JOIN cygx_article as a ON a.article_id = sg.article_id
  281. WHERE a.industrial_management_id = ?
  282. AND a.publish_status = 1`
  283. o := orm.NewOrm()
  284. err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
  285. return
  286. }
  287. //获取产业关联标的列表
  288. func GetIndustrialManagementSubjectList(articleId int) (items []*IndustrialSubject, err error) {
  289. o := orm.NewOrm()
  290. sql := `SELECT
  291. s.subject_name
  292. FROM
  293. cygx_industrial_subject AS s
  294. INNER JOIN cygx_industrial_article_group_subject AS sg ON sg.industrial_subject_id = s.industrial_subject_id
  295. INNER JOIN cygx_article AS a
  296. WHERE
  297. sg.article_id = ?
  298. AND a.publish_status = 1
  299. GROUP BY
  300. s.industrial_subject_id
  301. ORDER BY
  302. sg.create_time DESC
  303. LIMIT 4`
  304. _, err = o.Raw(sql, articleId).QueryRows(&items)
  305. return
  306. }