industrial_subject.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. package cygx
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "strconv"
  5. "strings"
  6. "time"
  7. )
  8. type IndustrialSubjectAdd struct {
  9. SubjectName string `description:"标的名称"`
  10. IndustrialManagementId int `description:"产业id"`
  11. Source int `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
  12. }
  13. type IndustrialSubjectDelete struct {
  14. IndustrialSubjectId int `orm:"column(industrial_subject_id);pk" description:"标的id"`
  15. }
  16. type CygxIndustrialSubject struct {
  17. IndustrialSubjectId int `orm:"column(industrial_subject_id);pk" description:"标的id"`
  18. IndustrialManagementId int `description:"产业id"`
  19. SubjectName string `description:"标的名称"`
  20. CreateTime time.Time `description:"创建时间"`
  21. Source int `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
  22. }
  23. type CygxIndustrialSubjectNum struct {
  24. IndustrialSubjectId int `orm:"column(industrial_subject_id);pk" description:"标的id"`
  25. IndustrialManagementId int `description:"产业id"`
  26. SubjectName string `description:"标的名称"`
  27. CreateTime time.Time `description:"创建时间"`
  28. ArtNum int `description:"文章数量"`
  29. IsRelevance bool `description:"是否存在关联文章"`
  30. }
  31. type GetIndustrialSubjectList struct {
  32. List []*CygxIndustrialSubject
  33. }
  34. type GetIndustrialSubjectNumList struct {
  35. List []*CygxIndustrialSubjectNum
  36. }
  37. func GetcygxIndustrialSubject(industrialManagementId int) (items []*CygxIndustrialSubject, err error) {
  38. o := orm.NewOrm()
  39. sql := `SELECT subject_name FROM cygx_industrial_subject WHERE industrial_management_id = ?`
  40. _, err = o.Raw(sql, industrialManagementId).QueryRows(&items)
  41. return
  42. }
  43. func UpdateIndustrialManagementSubjectNames(industrialManagementId int, industryName string) (err error) {
  44. o := orm.NewOrm()
  45. var nameSub string
  46. listSub, err := GetcygxIndustrialSubject(industrialManagementId)
  47. if err != nil {
  48. return
  49. }
  50. for _, v := range listSub {
  51. nameSub += v.SubjectName + ","
  52. }
  53. nameSub += industryName
  54. sql := `UPDATE cygx_industrial_management SET subject_names = ? WHERE industrial_management_id = ?`
  55. _, err = o.Raw(sql, nameSub, industrialManagementId).Exec()
  56. return
  57. }
  58. // 新增
  59. func AddIndustrialSubject(item *CygxIndustrialSubject) (newId int64, err error) {
  60. o := orm.NewOrm()
  61. newId, err = o.Insert(item)
  62. if err != nil {
  63. return
  64. }
  65. return
  66. }
  67. // 批量新增
  68. func AddIndustrialSubjectList(items []*CygxIndustrialSubject) (newIdStr string, err error) {
  69. o := orm.NewOrm()
  70. to, err := o.Begin()
  71. if err != nil {
  72. return
  73. }
  74. defer func() {
  75. if err != nil {
  76. _ = to.Rollback()
  77. } else {
  78. _ = to.Commit()
  79. }
  80. }()
  81. for _, v := range items {
  82. newId, errSub := to.Insert(v)
  83. newIdStr += strconv.Itoa(int(newId)) + ","
  84. if errSub != nil {
  85. return
  86. }
  87. }
  88. newIdStr = strings.Trim(newIdStr, ",")
  89. return
  90. }
  91. // 列表
  92. func GetIndustrialSubjectAll(IndustrialManagementId int) (items []*CygxIndustrialSubjectNum, err error) {
  93. o := orm.NewOrm()
  94. sql := `SELECT *,
  95. ( SELECT COUNT( 1 ) FROM cygx_industrial_article_group_subject AS sub_g WHERE sub_g.industrial_subject_id = sub.industrial_subject_id ) AS art_num
  96. FROM
  97. cygx_industrial_subject AS sub
  98. WHERE
  99. sub.industrial_management_id = ? `
  100. _, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
  101. return
  102. }
  103. // 获取数量
  104. func GetIndustrialSubjectCount(condition string, pars []interface{}) (count int, err error) {
  105. sqlCount := ` SELECT COUNT(1) AS count FROM cygx_industrial_subject WHERE 1=1 `
  106. if condition != "" {
  107. sqlCount += condition
  108. }
  109. o := orm.NewOrm()
  110. err = o.Raw(sqlCount, pars).QueryRow(&count)
  111. return
  112. }
  113. // 修改
  114. func EditIndustrialSubject(item *CygxIndustrialSubject) (err error) {
  115. o := orm.NewOrm()
  116. sql := `UPDATE cygx_industrial_subject SET subject_name=? WHERE industrial_subject_id=? `
  117. _, err = o.Raw(sql, item.SubjectName, item.IndustrialSubjectId).Exec()
  118. return
  119. }
  120. // 删除数据
  121. func DeleteIndustrialSubject(industrialSubjectId int) (err error) {
  122. o := orm.NewOrm()
  123. sql := ` DELETE FROM cygx_industrial_subject WHERE industrial_Subject_id = ?`
  124. _, err = o.Raw(sql, industrialSubjectId).Exec()
  125. return
  126. }
  127. type ArtGroupIndustrialSubjectRep struct {
  128. SubjectName string `description:"标的名称"`
  129. }
  130. type ArtGroupIndustrialSubjectRepList struct {
  131. List []*ArtGroupIndustrialSubjectRep
  132. }
  133. // 获取文章关联的标的数量
  134. func GetArtGroupIndustrialSubject(reportId int) (item []*ArtGroupIndustrialSubjectRep, err error) {
  135. sql := ` SELECT sub.subject_name FROM cygx_industrial_article_group_subject AS sub_g
  136. INNER JOIN cygx_industrial_subject AS sub ON sub.industrial_subject_id = sub_g.industrial_subject_id
  137. WHERE
  138. sub_g.cygx_article_id = ?`
  139. o := orm.NewOrm()
  140. _, err = o.Raw(sql, reportId).QueryRows(&item)
  141. return
  142. }
  143. // 获取标的关联的文章数量
  144. func GetIndustrialSubjectGroupArtCount(industrialSubjectId int) (count int, err error) {
  145. sqlCount := ` SELECT COUNT(1) AS count FROM cygx_industrial_article_group_subject WHERE industrial_subject_id=? `
  146. o := orm.NewOrm()
  147. err = o.Raw(sqlCount, industrialSubjectId).QueryRow(&count)
  148. return
  149. }
  150. // 列表
  151. func GetIndustrialSubjectAllByIds(condition string) (items []*CygxIndustrialSubjectNum, err error) {
  152. o := orm.NewOrm()
  153. sql := `SELECT *,
  154. ( SELECT COUNT( 1 ) FROM cygx_industrial_article_group_subject AS sub_g WHERE sub_g.industrial_subject_id = sub.industrial_subject_id ) AS art_num
  155. FROM
  156. cygx_industrial_subject AS sub
  157. WHERE 1=1 ` + condition
  158. _, err = o.Raw(sql).QueryRows(&items)
  159. return
  160. }
  161. func GetIndustrialSubjectDetailById(IndustrialSubjectId int) (item *CygxIndustrialSubject, err error) {
  162. o := orm.NewOrm()
  163. sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id = ? `
  164. err = o.Raw(sql, IndustrialSubjectId).QueryRow(&item)
  165. return
  166. }
  167. func GetIndustrialSubjectDetailByName(IndustrialSubjectName string) (item *CygxIndustrialSubject, err error) {
  168. o := orm.NewOrm()
  169. sql := `SELECT * FROM cygx_industrial_subject WHERE subject_name = ? `
  170. err = o.Raw(sql, IndustrialSubjectName).QueryRow(&item)
  171. return
  172. }
  173. // 列表
  174. func GetIndustrialSubjectListName(condition string) (items []*ArtGroupIndustrialSubjectRep, err error) {
  175. o := orm.NewOrm()
  176. sql := `SELECT s.*
  177. FROM
  178. cygx_industrial_subject AS s
  179. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id =s.industrial_management_id
  180. INNER JOIN chart_permission AS c ON c.chart_permission_id = m.chart_permission_id
  181. WHERE c.permission_name = '研选' `
  182. if condition != "" {
  183. sql += condition
  184. }
  185. _, err = o.Raw(sql).QueryRows(&items)
  186. return
  187. }
  188. type CygxIndustrialSubjectListRep struct {
  189. IndustrialSubjectId int `description:"标的id"`
  190. IndustrialManagementId int `description:"产业id"`
  191. SubjectName string `description:"标的名称"`
  192. IndustryName string `description:"分析师名称"`
  193. }
  194. type CygxIndustrialSubjectList struct {
  195. List []*CygxIndustrialSubjectListRep
  196. }
  197. type IndustrialNameListRep struct {
  198. List []*SubjectNameListRep
  199. }
  200. type SubjectNameListRep struct {
  201. Name string `description:"产业名称"`
  202. List []*SubjectNameRep
  203. }
  204. type SubjectNameRep struct {
  205. Name string `description:"标的名称"`
  206. }
  207. // 列表
  208. func GetIndustrialSubjectListNameByChartId(condition string) (items []*CygxIndustrialSubjectListRep, err error) {
  209. o := orm.NewOrm()
  210. sql := `SELECT s.*,m.industry_name
  211. FROM
  212. cygx_industrial_subject AS s
  213. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id =s.industrial_management_id
  214. INNER JOIN chart_permission AS c ON c.chart_permission_id = m.chart_permission_id
  215. WHERE 1= 1 `
  216. if condition != "" {
  217. sql += condition
  218. }
  219. sql += ` GROUP BY s.subject_name`
  220. _, err = o.Raw(sql).QueryRows(&items)
  221. return
  222. }
  223. // 通过多个标的ID获取产业名称
  224. func GetindustrialSubjectNames(subjectIds string) (names string, err error) {
  225. sql := ` SELECT
  226. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) AS names
  227. FROM
  228. cygx_industrial_subject AS s
  229. WHERE
  230. industrial_subject_id IN ( ` + subjectIds + `) `
  231. o := orm.NewOrm()
  232. err = o.Raw(sql).QueryRow(&names)
  233. return
  234. }
  235. // 列表
  236. func GetIndustrialSubjectListNameByName(condition string) (items []*CygxIndustrialSubject, err error) {
  237. o := orm.NewOrm()
  238. sql := `SELECT * FROM cygx_industrial_subject WHERE 1= 1`
  239. if condition != "" {
  240. sql += condition
  241. }
  242. _, err = o.Raw(sql).QueryRows(&items)
  243. return
  244. }
  245. // 通过标的名称获取标的关联的ID
  246. func GetIndustrialSubjectIdsByName(subjectName string) (industrialSubjectIds string, err error) {
  247. sql := ` SELECT
  248. GROUP_CONCAT( DISTINCT s.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_ids
  249. FROM
  250. cygx_industrial_subject AS s
  251. WHERE
  252. subject_name =? `
  253. o := orm.NewOrm()
  254. err = o.Raw(sql, subjectName).QueryRow(&industrialSubjectIds)
  255. return
  256. }
  257. // 通过标的名称获取标的关联的ID
  258. func GetIndustrialSubjectIdsByNameLike(subjectName string) (industrialSubjectIds string, err error) {
  259. sql := ` SELECT
  260. GROUP_CONCAT( DISTINCT s.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_ids
  261. FROM
  262. cygx_industrial_subject AS s
  263. WHERE
  264. subject_name LIKE '%` + subjectName + `%'`
  265. o := orm.NewOrm()
  266. err = o.Raw(sql).QueryRow(&industrialSubjectIds)
  267. return
  268. }
  269. type IndustrySubjectCountDetail struct {
  270. ArtTotalNum int `description:"文章总数量"`
  271. List []*IndustrySubjectArtTypeCountList
  272. }
  273. type IndustrySubjectArtTypeCountList struct {
  274. MatchTypeName string `description:"匹配类型"`
  275. ArtNum int `description:"文章数量"`
  276. }
  277. // GetIndustrySubjectArtTypeCountList 获取标的关联的报告数量列表-根据类型
  278. func GetIndustrySubjectArtTypeCountList(subjectId int) (list []*IndustrySubjectArtTypeCountList, err error) {
  279. o := orm.NewOrm()
  280. sql := `SELECT
  281. re.match_type_name,
  282. COUNT(*) AS art_num
  283. FROM
  284. cygx_industrial_subject AS sub
  285. INNER JOIN cygx_industrial_article_group_subject AS gsub ON gsub.industrial_subject_id = sub.industrial_subject_id
  286. INNER JOIN cygx_article AS art ON art.article_id = gsub.article_id
  287. INNER JOIN cygx_report_mapping AS re ON re.category_id = art.category_id
  288. WHERE
  289. sub.industrial_subject_id = ? AND re.match_type_name <> '' AND re.report_type = 2 AND art.publish_status = 1
  290. GROUP BY
  291. re.match_type_name `
  292. sql += `UNION ALL
  293. SELECT
  294. "研选报告",
  295. COUNT(*)
  296. FROM
  297. cygx_industrial_subject AS sub
  298. INNER JOIN cygx_industrial_article_group_subject AS gsub ON gsub.industrial_subject_id = sub.industrial_subject_id
  299. INNER JOIN cygx_article AS art ON art.article_id = gsub.article_id
  300. WHERE
  301. art.article_id > 1000000 AND art.article_type_id != 0 AND sub.industrial_subject_id = ? AND art.publish_status = 1`
  302. _, err = o.Raw(sql, subjectId, subjectId).QueryRows(&list)
  303. return
  304. }
  305. // 列表
  306. func GetIndustrySubjectListByIds(IndustrialSubjectIds string) (items []*CygxIndustrialSubject, err error) {
  307. o := orm.NewOrm()
  308. sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id IN (` + IndustrialSubjectIds + `) `
  309. _, err = o.Raw(sql).QueryRows(&items)
  310. return
  311. }
  312. // 获取标的列表
  313. func GetCygxIndustrialSubjectListCondition(condition string, pars []interface{}) (items []*CygxIndustrialSubject, err error) {
  314. o := orm.NewOrm()
  315. sql := `SELECT *
  316. FROM
  317. cygx_industrial_subject WHERE 1 = 1 ` + condition
  318. _, err = o.Raw(sql, pars).QueryRows(&items)
  319. return
  320. }