industrial_subject.go 12 KB

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