industrial_subject.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  110. err = o.Raw(sqlCount, pars).QueryRow(&count)
  111. return
  112. }
  113. // 修改
  114. func EditIndustrialSubject(item *CygxIndustrialSubject) (err error) {
  115. o := orm.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  147. err = o.Raw(sqlCount, industrialSubjectId).QueryRow(&count)
  148. return
  149. }
  150. // 列表
  151. func GetIndustrialSubjectAllByIds(condition string) (items []*CygxIndustrialSubjectNum, err error) {
  152. o := orm.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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.NewOrmUsingDB("hz_cygx")
  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. WHERE m.chart_permission_id = 31 `
  181. if condition != "" {
  182. sql += condition
  183. }
  184. _, err = o.Raw(sql).QueryRows(&items)
  185. return
  186. }
  187. type CygxIndustrialSubjectListRep struct {
  188. IndustrialSubjectId int `description:"标的id"`
  189. IndustrialManagementId int `description:"产业id"`
  190. SubjectName string `description:"标的名称"`
  191. IndustryName string `description:"分析师名称"`
  192. }
  193. type CygxIndustrialSubjectList struct {
  194. List []*CygxIndustrialSubjectListRep
  195. }
  196. type IndustrialNameListRep struct {
  197. List []*SubjectNameListRep
  198. }
  199. type SubjectNameListRep struct {
  200. Name string `description:"产业名称"`
  201. List []*SubjectNameRep
  202. }
  203. type SubjectNameRep struct {
  204. Name string `description:"标的名称"`
  205. }
  206. // 列表
  207. func GetIndustrialSubjectListNameByChartId(condition string) (items []*CygxIndustrialSubjectListRep, err error) {
  208. o := orm.NewOrmUsingDB("hz_cygx")
  209. sql := `SELECT s.*,m.industry_name
  210. FROM
  211. cygx_industrial_subject AS s
  212. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id =s.industrial_management_id
  213. WHERE 1= 1 `
  214. if condition != "" {
  215. sql += condition
  216. }
  217. sql += ` GROUP BY s.subject_name`
  218. _, err = o.Raw(sql).QueryRows(&items)
  219. return
  220. }
  221. // 通过多个标的ID获取产业名称
  222. func GetindustrialSubjectNames(subjectIds string) (names string, err error) {
  223. sql := ` SELECT
  224. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) AS names
  225. FROM
  226. cygx_industrial_subject AS s
  227. WHERE
  228. industrial_subject_id IN ( ` + subjectIds + `) `
  229. o := orm.NewOrmUsingDB("hz_cygx")
  230. err = o.Raw(sql).QueryRow(&names)
  231. return
  232. }
  233. // 列表
  234. func GetIndustrialSubjectListNameByName(condition string) (items []*CygxIndustrialSubject, err error) {
  235. o := orm.NewOrmUsingDB("hz_cygx")
  236. sql := `SELECT * FROM cygx_industrial_subject WHERE 1= 1`
  237. if condition != "" {
  238. sql += condition
  239. }
  240. _, err = o.Raw(sql).QueryRows(&items)
  241. return
  242. }
  243. // 通过标的名称获取标的关联的ID
  244. func GetIndustrialSubjectIdsByName(subjectName string) (industrialSubjectIds string, err error) {
  245. sql := ` SELECT
  246. GROUP_CONCAT( DISTINCT s.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_ids
  247. FROM
  248. cygx_industrial_subject AS s
  249. WHERE
  250. subject_name =? `
  251. o := orm.NewOrmUsingDB("hz_cygx")
  252. err = o.Raw(sql, subjectName).QueryRow(&industrialSubjectIds)
  253. return
  254. }
  255. // 通过标的名称获取标的关联的ID
  256. func GetIndustrialSubjectIdsByNameLike(subjectName string) (industrialSubjectIds string, err error) {
  257. sql := ` SELECT
  258. GROUP_CONCAT( DISTINCT s.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_ids
  259. FROM
  260. cygx_industrial_subject AS s
  261. WHERE
  262. subject_name LIKE '%` + subjectName + `%'`
  263. o := orm.NewOrmUsingDB("hz_cygx")
  264. err = o.Raw(sql).QueryRow(&industrialSubjectIds)
  265. return
  266. }
  267. type IndustrySubjectCountDetail struct {
  268. ArtTotalNum int `description:"文章总数量"`
  269. List []*IndustrySubjectArtTypeCountList
  270. }
  271. type IndustrySubjectArtTypeCountList struct {
  272. MatchTypeName string `description:"匹配类型"`
  273. ArtNum int `description:"文章数量"`
  274. }
  275. // GetIndustrySubjectArtTypeCountList 获取标的关联的报告数量列表-根据类型
  276. func GetIndustrySubjectArtTypeCountList(subjectId int) (list []*IndustrySubjectArtTypeCountList, err error) {
  277. o := orm.NewOrmUsingDB("hz_cygx")
  278. sql := `SELECT
  279. re.match_type_name,
  280. COUNT(*) AS art_num
  281. FROM
  282. cygx_industrial_subject AS sub
  283. INNER JOIN cygx_industrial_article_group_subject AS gsub ON gsub.industrial_subject_id = sub.industrial_subject_id
  284. INNER JOIN cygx_article AS art ON art.article_id = gsub.article_id
  285. INNER JOIN cygx_report_mapping AS re ON re.category_id = art.category_id
  286. WHERE
  287. sub.industrial_subject_id = ? AND re.match_type_name <> '' AND re.report_type = 2 AND art.publish_status = 1
  288. GROUP BY
  289. re.match_type_name `
  290. sql += `UNION ALL
  291. SELECT
  292. "研选报告",
  293. COUNT(*)
  294. FROM
  295. cygx_industrial_subject AS sub
  296. INNER JOIN cygx_industrial_article_group_subject AS gsub ON gsub.industrial_subject_id = sub.industrial_subject_id
  297. INNER JOIN cygx_article AS art ON art.article_id = gsub.article_id
  298. WHERE
  299. art.article_id > 1000000 AND art.article_type_id != 0 AND sub.industrial_subject_id = ? AND art.publish_status = 1`
  300. _, err = o.Raw(sql, subjectId, subjectId).QueryRows(&list)
  301. return
  302. }
  303. // 列表
  304. func GetIndustrySubjectListByIds(IndustrialSubjectIds string) (items []*CygxIndustrialSubject, err error) {
  305. o := orm.NewOrmUsingDB("hz_cygx")
  306. sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id IN (` + IndustrialSubjectIds + `) `
  307. _, err = o.Raw(sql).QueryRows(&items)
  308. return
  309. }
  310. // 获取标的列表
  311. func GetCygxIndustrialSubjectListCondition(condition string, pars []interface{}) (items []*CygxIndustrialSubject, err error) {
  312. o := orm.NewOrmUsingDB("hz_cygx")
  313. sql := `SELECT *
  314. FROM
  315. cygx_industrial_subject WHERE 1 = 1 ` + condition
  316. _, err = o.Raw(sql, pars).QueryRows(&items)
  317. return
  318. }