report_article.go 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402
  1. package cygx
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_crm_api/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. type ShowButton struct {
  12. IsShowButton bool `description:"是否展示操作按钮"`
  13. }
  14. type ReportArticleAdd struct {
  15. SubjectName string `description:"标的名称"`
  16. IndustrialManagementId int `description:"产业id"`
  17. }
  18. // 报告归类入参
  19. type ReportArticleClassificationResp struct {
  20. ReportId int `description:"报告id"`
  21. IndustrialManagementId string `description:"产业id"`
  22. //IndustrialManagementIdStr string `description:"产业id多个用 , 逗号隔开 1,2"`
  23. IndustrialSubjectIdStr string `description:"标的id多个用 , 逗号隔开 1,2"`
  24. }
  25. type CygxReportArticleID struct {
  26. ReportId int `orm:"column(id);pk"description:"报告id"`
  27. }
  28. type CygxReportArticle struct {
  29. ReportId int `orm:"column(id);pk"description:"报告id"`
  30. ArticleId int `description:"文章id"`
  31. Title string `description:"标题"`
  32. PublishDate string `description:"发布时间"`
  33. CreateDate string `description:"创建时间"`
  34. LastUpdatedTime string `description:"更新时间"`
  35. PermissionName string `orm:"column(chart_permission_name);" description:"行业"`
  36. ChartPermissionId int `description:"行业id"`
  37. SubCategoryName string `description:"主题"`
  38. MatchTypeName string `description:"匹配类型"`
  39. ChartPermissionName string `description:"匹配类型"`
  40. IndustryName string `description:"产业名称"`
  41. IndustryIdStr string `description:"产业ID"`
  42. SubjectNameStr string `description:"关联标的"`
  43. SubjectIdStr string `description:"关联Id"`
  44. IsClass int `description:"是否归类 1是、0否"`
  45. IsFilter int `description:"是否过滤 1是、0否"`
  46. ArticleIdMd5 string `description:"文章加密ID"`
  47. CategoryId int `description:"文章分类id"`
  48. ShowButton bool `description:"是否展示过滤归类按钮"`
  49. Pv int `description:"PV"`
  50. Uv int `description:"UV"`
  51. ClPv int `description:"策略平台PV"`
  52. ClUv int `description:"策略平台UV"`
  53. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  54. CommentNum int `description:"留言数量"`
  55. NickName string `description:"作者昵称"`
  56. CollectionNum int `description:"收藏"`
  57. Stock string `description:"个股标签(上海策略品台同步)"`
  58. FieldName string `description:"产业标签(上海策略品台同步)"`
  59. Label string `description:"标签"`
  60. ListIndustrial []*IndustrialActivityGroupManagementRep
  61. ListSubject []*SubjectActivityGroupManagementRep
  62. HttpUrl string `description:"跳转地址"`
  63. }
  64. type GetReportArticleListRep struct {
  65. Paging *paging.PagingItem `description:"分页数据"`
  66. List []*CygxReportArticle
  67. }
  68. // 新增
  69. func AddReportArticle(item *CygxReportArticle) (err error) {
  70. o := orm.NewOrmUsingDB("hz_cygx")
  71. _, err = o.Insert(item)
  72. return
  73. }
  74. // 列表
  75. func GetReportArticleList(condition string, pars []interface{}, startSize, pageSize, isClass int) (items []*CygxReportArticle, err error) {
  76. o := orm.NewOrmUsingDB("hz_cygx")
  77. //o := orm.NewOrm()
  78. sql := ``
  79. if isClass == 1 {
  80. sql = `SELECT
  81. art.title,
  82. art.article_id,
  83. art.report_id,
  84. art.category_id,
  85. art.publish_date,
  86. art.is_class,
  87. art.publish_status,
  88. art.is_filter,
  89. art.stock,
  90. art.field_name,
  91. art.id,
  92. art.article_id_md5,
  93. re.chart_permission_name,
  94. re.match_type_name,
  95. art.sub_category_name,
  96. re.chart_permission_id
  97. FROM
  98. cygx_article AS art
  99. LEFT JOIN cygx_report_mapping AS ret ON ret.category_id = art.category_id_two
  100. LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id
  101. LEFT JOIN cygx_industrial_article_group_management as man ON man.article_id = art.article_id
  102. WHERE 1 = 1 `
  103. } else {
  104. sql = `SELECT
  105. art.title,
  106. art.article_id,
  107. art.report_id,
  108. art.category_id,
  109. art.publish_date,
  110. art.is_class,
  111. art.is_filter,
  112. art.id,
  113. art.article_id_md5,
  114. art.stock,
  115. art.field_name,
  116. re.chart_permission_name,
  117. re.match_type_name,
  118. re.sub_category_name,
  119. re.chart_permission_id FROM cygx_article as art
  120. LEFT JOIN cygx_report_mapping AS ret ON ret.category_id = art.category_id_two
  121. LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id
  122. WHERE 1=1 `
  123. }
  124. if condition != "" {
  125. sql += condition
  126. }
  127. sql += `LIMIT ?,?`
  128. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  129. return
  130. }
  131. // 获取文章PV、UV
  132. func GetReportArticleListPvUv(condition string) (items []*CygxReportArticle, err error) {
  133. o := orm.NewOrmUsingDB("hz_cygx")
  134. sql := `SELECT
  135. ( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h WHERE h.article_id = art.article_id AND h.platfor = 1 AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) + ` ) AS pv,
  136. (SELECT COUNT( DISTINCT h.user_id ) FROM cygx_article_history_record_all AS h WHERE h.article_id = art.article_id AND h.platfor = 1 AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) + ` ) AS uv,
  137. ( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h WHERE h.article_id = art.article_id AND h.platfor = 2 AND is_del = 0 AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) + ` ) AS cl_pv,
  138. (SELECT COUNT( DISTINCT h.user_id ) FROM cygx_article_history_record_all AS h WHERE h.article_id = art.article_id AND h.platfor = 2 AND is_del = 0 AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) + ` ) AS cl_uv,
  139. ( SELECT COUNT( 1 ) FROM cygx_article_collect AS c WHERE c.article_id = art.article_id ) AS collection_num,
  140. art.article_id
  141. FROM
  142. cygx_article AS art
  143. LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two
  144. LEFT JOIN cygx_industrial_article_group_management as man ON man.article_id = art.article_id
  145. WHERE 1 = 1 `
  146. if condition != "" {
  147. sql += condition
  148. }
  149. _, err = o.Raw(sql).QueryRows(&items)
  150. return
  151. }
  152. // 获取数量
  153. func GetReportArticleCount(condition string, pars []interface{}) (count int, err error) {
  154. sqlCount := ``
  155. sqlCount = ` SELECT COUNT(1) as count FROM (SELECT art.article_id
  156. FROM cygx_article AS art
  157. LEFT JOIN cygx_report_mapping AS ret ON ret.category_id = art.category_id_two
  158. LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id
  159. LEFT JOIN cygx_industrial_article_group_management AS man ON man.article_id = art.article_id WHERE 1= 1 ` + condition + ` GROUP BY art.article_id) as a `
  160. o := orm.NewOrmUsingDB("hz_cygx")
  161. err = o.Raw(sqlCount, pars).QueryRow(&count)
  162. return
  163. }
  164. // 获取数量
  165. func GetCygxArticleCount(condition string, pars []interface{}) (count int, err error) {
  166. o := orm.NewOrmUsingDB("hz_cygx")
  167. sqlCount := ` SELECT COUNT(1) AS count FROM cygx_article as art WHERE 1= 1 `
  168. if condition != "" {
  169. sqlCount += condition
  170. }
  171. err = o.Raw(sqlCount, pars).QueryRow(&count)
  172. return
  173. }
  174. //修改
  175. //func EditReportArticle(item *CygxReportArticle) (err error) {
  176. // sql := `UPDATE cygx_industrial_subject SET subject_name=? WHERE industrial_subject_id=? `
  177. // o := orm.NewOrm()
  178. // _, err = o.Raw(sql, item.SubjectName, item.ReportArticleId).Exec()
  179. // return
  180. //}
  181. // 过滤
  182. func FilterReportArticle(reportArticleId int) (err error) {
  183. o := orm.NewOrmUsingDB("hz_cygx")
  184. to, err := o.Begin()
  185. if err != nil {
  186. return
  187. }
  188. defer func() {
  189. if err != nil {
  190. _ = to.Rollback()
  191. } else {
  192. _ = to.Commit()
  193. }
  194. }()
  195. //修改文章状态
  196. sql := `UPDATE cygx_article SET is_filter=1, is_class=0 WHERE id=? `
  197. _, err = to.Raw(sql, reportArticleId).Exec()
  198. if err != nil {
  199. return
  200. }
  201. //删除关联产业
  202. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE cygx_article_id = ?`
  203. _, err = to.Raw(sql, reportArticleId).Exec()
  204. if err != nil {
  205. return
  206. }
  207. //删除关联标的
  208. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE cygx_article_id = ?`
  209. _, err = to.Raw(sql, reportArticleId).Exec()
  210. if err != nil {
  211. return
  212. }
  213. return
  214. }
  215. type CygxReportArticleItems struct {
  216. ReportId int `orm:"column(id);pk"description:"报告主键id"`
  217. ArticleId int `description:"文章ID"`
  218. IsFilter int `description:"是否过滤"`
  219. IsClass int `description:"是否归类"`
  220. ReportType int `description:"报告类型,1行业报告,2产业报告"`
  221. Title string `description:"标题"`
  222. PublishDate string `description:"发布时间"`
  223. Abstract string `description:"摘要"`
  224. }
  225. func GetReportArticleId(reportArticleId int) (items *CygxReportArticleItems, err error) {
  226. o := orm.NewOrmUsingDB("hz_cygx")
  227. sql := ` SELECT * FROM cygx_article WHERE id=? `
  228. err = o.Raw(sql, reportArticleId).QueryRow(&items)
  229. return
  230. }
  231. // 报告分类第一次添加
  232. func ReportArticleClassificationAdd(reportId, industrialManagementId, articleId int, ndustrialSubjectIdStr string) (err error) {
  233. o := orm.NewOrmUsingDB("hz_cygx")
  234. to, err := o.Begin()
  235. if err != nil {
  236. return
  237. }
  238. defer func() {
  239. if err != nil {
  240. _ = to.Rollback()
  241. } else {
  242. _ = to.Commit()
  243. }
  244. }()
  245. //修改文章是否归类字段
  246. sql := `UPDATE cygx_article SET is_filter=0, is_class=1 WHERE id=? `
  247. _, err = to.Raw(sql, reportId).Exec()
  248. if err != nil {
  249. return
  250. }
  251. //添加文章关联标的
  252. if ndustrialSubjectIdStr != "" {
  253. strList := strings.Split(ndustrialSubjectIdStr, ",")
  254. for _, v := range strList {
  255. sql := `INSERT INTO cygx_industrial_article_group_subject ( cygx_article_id, article_id, industrial_subject_id, create_time ) VALUES ( ?, ?, ?, ? )`
  256. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  257. if err != nil {
  258. return
  259. }
  260. }
  261. }
  262. //添加文章关联行业
  263. sql = ` INSERT INTO cygx_industrial_article_group_management ( cygx_article_id, article_id, industrial_management_id, create_time ) VALUES ( ?, ?, ?, ? )`
  264. _, err = to.Raw(sql, reportId, articleId, industrialManagementId, time.Now()).Exec()
  265. if err != nil {
  266. return
  267. }
  268. fmt.Println("新增关联")
  269. return
  270. }
  271. // 报告分类的新增与修改
  272. func ReportArticleClassificationEdit(reportId, industrialManagementId, articleId int, ndustrialSubjectIdStr string) (err error) {
  273. o := orm.NewOrmUsingDB("hz_cygx")
  274. to, err := o.Begin()
  275. if err != nil {
  276. return
  277. }
  278. defer func() {
  279. if err != nil {
  280. _ = to.Rollback()
  281. } else {
  282. _ = to.Commit()
  283. }
  284. }()
  285. //修改文章是否过滤字段
  286. //sql := `UPDATE cygx_article SET is_filter=0 WHERE id=? `
  287. sql := `UPDATE cygx_article SET is_filter=0, is_class=1 WHERE id=? `
  288. _, err = to.Raw(sql, reportId).Exec()
  289. if err != nil {
  290. return
  291. }
  292. //删除文章关联标的
  293. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE cygx_article_id = ?`
  294. _, err = to.Raw(sql, reportId).Exec()
  295. if err != nil {
  296. return
  297. }
  298. //添加文章关联标的
  299. if ndustrialSubjectIdStr != "" {
  300. strList := strings.Split(ndustrialSubjectIdStr, ",")
  301. for _, v := range strList {
  302. sql := `INSERT INTO cygx_industrial_article_group_subject ( cygx_article_id, article_id, industrial_subject_id, create_time ) VALUES ( ?, ?, ?, ? )`
  303. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  304. if err != nil {
  305. return
  306. }
  307. }
  308. }
  309. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  310. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE cygx_article_id = ?`
  311. _, err = to.Raw(sql, reportId).Exec()
  312. if err != nil {
  313. return
  314. }
  315. //添加文章关联行业
  316. sql = ` INSERT INTO cygx_industrial_article_group_management ( cygx_article_id, article_id, industrial_management_id, create_time ) VALUES ( ?, ?, ?, ? )`
  317. _, err = to.Raw(sql, reportId, articleId, industrialManagementId, time.Now()).Exec()
  318. if err != nil {
  319. return
  320. }
  321. fmt.Println("修改关联")
  322. return
  323. }
  324. type PermissionMappingCategoryRep struct {
  325. CategoryId int `description:"文章分类id"`
  326. }
  327. func GetPermissionMappingCategoryID() (item []*PermissionMappingCategoryRep, err error) {
  328. o := orm.NewOrmUsingDB("hz_cygx")
  329. sql := ` SELECT category_id FROM cygx_report_mapping WHERE report_type = 1 AND category_id not IN (67) GROUP BY category_id `
  330. _, err = o.Raw(sql).QueryRows(&item)
  331. return
  332. }
  333. // 报告分类的新增与修改
  334. func ReportArticleClassificationEditNew(reportId int, industrialManagementIdStr string, articleId int, ndustrialSubjectIdStr string) (err error) {
  335. o := orm.NewOrmUsingDB("hz_cygx")
  336. to, err := o.Begin()
  337. if err != nil {
  338. return
  339. }
  340. defer func() {
  341. if err != nil {
  342. _ = to.Rollback()
  343. } else {
  344. _ = to.Commit()
  345. }
  346. }()
  347. //修改文章是否过滤字段
  348. //sql := `UPDATE cygx_article SET is_filter=0 WHERE id=? `
  349. sql := `UPDATE cygx_article SET is_filter=0, is_class=1 WHERE id=? `
  350. _, err = to.Raw(sql, reportId).Exec()
  351. if err != nil {
  352. return
  353. }
  354. //删除文章关联标的
  355. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE cygx_article_id = ?`
  356. _, err = to.Raw(sql, reportId).Exec()
  357. if err != nil {
  358. return
  359. }
  360. //添加文章关联标的
  361. if ndustrialSubjectIdStr != "0" && ndustrialSubjectIdStr != "" {
  362. strList := strings.Split(ndustrialSubjectIdStr, ",")
  363. for _, v := range strList {
  364. sql := `INSERT INTO cygx_industrial_article_group_subject ( cygx_article_id, article_id, industrial_subject_id, create_time ) VALUES ( ?, ?, ?, ? )`
  365. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  366. if err != nil {
  367. return
  368. }
  369. }
  370. }
  371. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  372. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE cygx_article_id = ?`
  373. _, err = to.Raw(sql, reportId).Exec()
  374. if err != nil {
  375. return
  376. }
  377. //添加文章关联行业
  378. industrialStrList := strings.Split(industrialManagementIdStr, ",")
  379. for _, v := range industrialStrList {
  380. sql = ` INSERT INTO cygx_industrial_article_group_management ( cygx_article_id, article_id, industrial_management_id, create_time ) VALUES ( ?, ?, ?, ? )`
  381. _, err = to.Raw(sql, reportId, articleId, v, time.Now()).Exec()
  382. if err != nil {
  383. return
  384. }
  385. }
  386. return
  387. }
  388. // 报告阅读明细下载
  389. type ReportExportRep struct {
  390. Id string `description:"客户姓名"`
  391. RealName string `description:"客户姓名"`
  392. CompanyName string `description:"公司名称"`
  393. CreateTime string `description:"阅读时间"`
  394. SellerName string `description:"销售名称"`
  395. StopTime string `停留时间:"停留时间"`
  396. }
  397. func GetReportExportRep(article_id int, sqlStr string) (item []*ReportExportRep, err error) {
  398. o := orm.NewOrmUsingDB("hz_cygx")
  399. sql := ` SELECT h.*
  400. FROM
  401. cygx_article_history_record_newpv AS h
  402. LEFT JOIN cygx_article AS art ON art.article_id = h.article_id
  403. WHERE art.id = ?` + sqlStr
  404. _, err = o.Raw(sql, article_id).QueryRows(&item)
  405. return
  406. }
  407. // 报告关联的匹配类型
  408. type ReportMatchTypeName struct {
  409. MatchID string `orm:"column(id);"description:"匹配ID"`
  410. MatchTypeName string `description:"匹配类型"`
  411. }
  412. type ReportMatchTypeNameList struct {
  413. List []*ReportMatchTypeName
  414. }
  415. func GetMatchTypeName(categoryId int) (items []*ReportMatchTypeName, err error) {
  416. o := orm.NewOrmUsingDB("hz_cygx")
  417. sql := `SELECT * FROM cygx_report_mapping
  418. WHERE
  419. chart_permission_id = (
  420. SELECT
  421. chart_permission_id
  422. FROM
  423. cygx_report_mapping
  424. WHERE
  425. category_id = ? LIMIT 1
  426. )
  427. AND match_type_name <>''
  428. GROUP BY match_type_name
  429. ORDER BY id ASC `
  430. _, err = o.Raw(sql, categoryId).QueryRows(&items)
  431. return
  432. }
  433. type ArticleDetail struct {
  434. ArticleId int `description:"报告id"`
  435. Title string `description:"标题"`
  436. TitleEn string `description:"英文标题 "`
  437. UpdateFrequency string `description:"更新周期"`
  438. CreateDate string `description:"创建时间"`
  439. PublishDate string `description:"发布时间"`
  440. Body string `description:"内容"`
  441. Annotation string `description:"核心观点"`
  442. Abstract string `description:"摘要"`
  443. CategoryName string `description:"一级分类"`
  444. SubCategoryName string `description:"二级分类"`
  445. MatchTypeName string `description:"匹配类型"`
  446. IsCollect bool `description:"是否收藏:true,已收藏,false:未收藏"`
  447. IsInterviewApply bool `description:"是否申请访谈:true,已申请,false:未申请"`
  448. BodyText string `description:"内容"`
  449. InterviewApplyStatus string `description:"当前访谈申请状态:'待邀请','待访谈','已完成','已取消'"`
  450. InterviewDate string `description:"访谈时间"`
  451. ExpertBackground string `description:"专家背景"`
  452. ExpertNumber string `description:"专家编号"`
  453. Department string `description:"作者"`
  454. ArticleIdMd5 string `description:"纪要id"`
  455. IsClass int `description:"是否归类,1是,0否"`
  456. IsSummary int `description:"是否是纪要库,1是,0否"`
  457. CategoryId int `description:"分类ID"`
  458. CategoryIdTwo int `description:"分类ID"`
  459. FileLink string `description:"下载预览链接"`
  460. ReportType int `description:"报告类型,2产业报告,1行业报告"`
  461. TypeName string `description:"策略平台类型字段名称"`
  462. ArticleTypeId int `description:"文章类型ID"`
  463. ArticleTypeName string `description:"文章类型名称"`
  464. Stock string `description:"个股标签(上海策略品台同步)"`
  465. FieldName string `description:"产业标签(上海策略品台同步)"`
  466. }
  467. func GetArticleDetailById(articleId int) (item *ArticleDetail, err error) {
  468. o := orm.NewOrmUsingDB("hz_cygx")
  469. sql := `SELECT * FROM cygx_article WHERE id = ? `
  470. err = o.Raw(sql, articleId).QueryRow(&item)
  471. return
  472. }
  473. func GetArticleDetailByArticleId(articleId int) (item *ArticleDetail, err error) {
  474. o := orm.NewOrmUsingDB("hz_cygx")
  475. sql := `SELECT * FROM cygx_article WHERE article_id = ? `
  476. err = o.Raw(sql, articleId).QueryRow(&item)
  477. return
  478. }
  479. // 修改报告匹配类型
  480. type UpdateReportMatchTypeNameRep struct {
  481. MatchID int `orm:"column(id);"description:"匹配ID"`
  482. ReportId int `description:"报告id"`
  483. }
  484. // 手动修改匹配类型
  485. func UpdateReportMatchTypeName(matchTypeName string, reportType, categoryId, reportId, isSummary, isClass int) (err error) {
  486. o := orm.NewOrmUsingDB("hz_cygx")
  487. to, err := o.Begin()
  488. if err != nil {
  489. return
  490. }
  491. defer func() {
  492. if err != nil {
  493. fmt.Println(err)
  494. _ = to.Rollback()
  495. } else {
  496. _ = to.Commit()
  497. }
  498. }()
  499. sql := ""
  500. //fmt.Println(sql)
  501. if isSummary == 0 {
  502. //删除关联产业
  503. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE cygx_article_id = ?`
  504. _, err = to.Raw(sql, reportId).Exec()
  505. if err != nil {
  506. return
  507. }
  508. //删除关联标的
  509. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE cygx_article_id = ?`
  510. _, err = to.Raw(sql, reportId).Exec()
  511. if err != nil {
  512. return
  513. }
  514. }
  515. //修改文章是否过滤字段
  516. if reportType == 1 {
  517. sql = `UPDATE cygx_article SET match_type_name=?, report_type=? ,category_id=?, is_class = 1, is_custom = 1 WHERE id=? `
  518. } else {
  519. sql = `UPDATE cygx_article SET match_type_name=?, report_type=? ,category_id=?, is_class = 0, is_custom = 1 WHERE id=? `
  520. }
  521. if isSummary == 1 && isClass == 1 {
  522. sql = `UPDATE cygx_article SET match_type_name=?, report_type=? ,category_id=?, is_class = 1, is_custom = 1 WHERE id=? `
  523. }
  524. _, err = to.Raw(sql, matchTypeName, reportType, categoryId, reportId).Exec()
  525. return
  526. }
  527. func GetArticleDetailByMd5Id(md5Id string) (item *ArticleDetail, err error) {
  528. o := orm.NewOrmUsingDB("hz_cygx")
  529. sql := `SELECT *FROM cygx_article WHERE article_id_md5 = ? `
  530. err = o.Raw(sql, md5Id).QueryRow(&item)
  531. return
  532. }
  533. type ReportAddRep struct {
  534. ArticleId int `description:"报告id"`
  535. Title string `description:"标题"`
  536. Abstract string `description:"摘要"`
  537. Body string `description:"内容"`
  538. DoType int `description:"操作类型 0,保存 、1,发布"`
  539. SellerAndMobile string `description:"作者"`
  540. ChartPermissionId int `description:"行业id"`
  541. IndustrialManagementIds string `description:"产业id 多个用 , 隔开"`
  542. IndustrialSubjectIds string `description:"标的id 多个用 , 隔开"`
  543. PublishDate string `description:"发布时间 列如 2020-03-23"`
  544. }
  545. // 添加报告文章
  546. func AddAReportrticle(item *CygxArticle, chartPermissionId int, industryName, subjectName string, itemDepartment *CygxArticleDepartment, industrialManagementIds, industrialSubjectIds string) (newId int64, err error) {
  547. var newDepartmentId int64
  548. var total int
  549. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  550. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  551. o := orm.NewOrmUsingDB("hz_cygx")
  552. to, err := o.Begin()
  553. if err != nil {
  554. return
  555. }
  556. defer func() {
  557. if err != nil {
  558. _ = to.Rollback()
  559. } else {
  560. _ = to.Commit()
  561. }
  562. }()
  563. if itemDepartment.NickName != "" {
  564. //判断作者是否存在,如果没有则新增
  565. total, err = GetArticleDepartmentCount(itemDepartment.NickName, itemDepartment.Remarks)
  566. if err != nil {
  567. return
  568. }
  569. if total == 0 {
  570. newDepartmentId, err = to.Insert(itemDepartment)
  571. if err != nil {
  572. return
  573. }
  574. } else {
  575. departmentDetail := new(CygxArticleDepartmentRep)
  576. departmentDetail, err = GetArticleDepartmentDateil(itemDepartment.NickName, itemDepartment.Remarks)
  577. if err != nil {
  578. return
  579. }
  580. newDepartmentId = int64(departmentDetail.DepartmentId)
  581. }
  582. item.DepartmentId = int(newDepartmentId)
  583. }
  584. newId, err = to.Insert(item) // 新增文章
  585. if err != nil {
  586. return
  587. }
  588. //添加产业与文章的关联
  589. industrialManagementIdList := strings.Split(industrialManagementIds, ",")
  590. for _, v := range industrialManagementIdList {
  591. newIndustrialId, _ := strconv.Atoi(v)
  592. itemIndustrialManagementGroup.CreateTime = time.Now()
  593. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  594. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  595. itemIndustrialManagementGroup.IndustrialManagementId = newIndustrialId
  596. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  597. if err != nil {
  598. return
  599. }
  600. }
  601. //添加标的与文章的关联
  602. if industrialSubjectIds != "" {
  603. industrialSubjectIdList := strings.Split(industrialSubjectIds, ",")
  604. for _, v := range industrialSubjectIdList {
  605. industrialSubjectId, _ := strconv.Atoi(v)
  606. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  607. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  608. itemIndustrialSubjectGroup.IndustrialSubjectId = industrialSubjectId
  609. itemIndustrialSubjectGroup.CreateTime = time.Now()
  610. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  611. if err != nil {
  612. return
  613. }
  614. }
  615. }
  616. return
  617. }
  618. // 修改报告文章
  619. func EditReportrticle(item *CygxArticle, chartPermissionId int, industryName, subjectName string, oldPublishStatus int, itemDepartment *CygxArticleDepartment, industrialManagementIds, industrialSubjectIds string) (err error) {
  620. var sql string
  621. var newDepartmentId int64
  622. var total int
  623. newId := item.SummaryManageId
  624. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  625. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  626. o := orm.NewOrmUsingDB("hz_cygx")
  627. to, err := o.Begin()
  628. if err != nil {
  629. return
  630. }
  631. defer func() {
  632. if err != nil {
  633. _ = to.Rollback()
  634. } else {
  635. _ = to.Commit()
  636. }
  637. }()
  638. if itemDepartment.NickName != "" {
  639. //判断作者是否存在,如果没有则新增
  640. total, err = GetArticleDepartmentCount(itemDepartment.NickName, itemDepartment.Remarks)
  641. if err != nil {
  642. return
  643. }
  644. if total == 0 {
  645. newDepartmentId, err = to.Insert(itemDepartment)
  646. if err != nil {
  647. return
  648. }
  649. } else {
  650. departmentDetail := new(CygxArticleDepartmentRep)
  651. departmentDetail, err = GetArticleDepartmentDateil(itemDepartment.NickName, itemDepartment.Remarks)
  652. if err != nil {
  653. return
  654. }
  655. newDepartmentId = int64(departmentDetail.DepartmentId)
  656. }
  657. item.DepartmentId = int(newDepartmentId)
  658. }
  659. sql = ` UPDATE cygx_article SET
  660. category_name=?,
  661. title=?,
  662. abstract=?,
  663. body=?,
  664. body_text=?,
  665. publish_status=?,
  666. last_updated_time = ?,
  667. seller_and_mobile=?,
  668. expert_background =?,
  669. expert_number=? ,
  670. interview_date=?,
  671. file_link=? ,
  672. chart_permission_ids =?,
  673. article_type_id =?,
  674. article_type_name =?,
  675. admin_id =?,
  676. admin_name =?,
  677. is_summary =?,
  678. is_report =?,
  679. department_id =?,
  680. publish_date =?,
  681. report_link =?
  682. WHERE article_id =?`
  683. _, err = to.Raw(sql, item.CategoryName, item.Title, item.Abstract, item.Body, item.BodyText, item.PublishStatus, item.LastUpdatedTime, item.SellerAndMobile, item.ExpertBackground, item.ExpertNumber, item.InterviewDate, item.FileLink, item.ChartPermissionIds, item.ArticleTypeId, item.ArticleTypeName, item.AdminId, item.AdminName, item.IsSummary, item.IsReport, item.DepartmentId, item.PublishDate, item.ReportLink, item.ArticleId).Exec()
  684. if err != nil {
  685. return
  686. }
  687. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  688. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  689. _, err = to.Raw(sql, item.ArticleId).Exec()
  690. if err != nil {
  691. return
  692. }
  693. //删除文章关联标的
  694. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  695. _, err = to.Raw(sql, item.ArticleId).Exec()
  696. if err != nil {
  697. return
  698. }
  699. //添加产业与文章的关联
  700. industrialManagementIdList := strings.Split(industrialManagementIds, ",")
  701. for _, v := range industrialManagementIdList {
  702. newIndustrialId, _ := strconv.Atoi(v)
  703. itemIndustrialManagementGroup.CreateTime = time.Now()
  704. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  705. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  706. itemIndustrialManagementGroup.IndustrialManagementId = newIndustrialId
  707. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  708. if err != nil {
  709. return
  710. }
  711. }
  712. //添加标的与文章的关联
  713. if industrialSubjectIds != "" {
  714. industrialSubjectIdList := strings.Split(industrialSubjectIds, ",")
  715. for _, v := range industrialSubjectIdList {
  716. industrialSubjectId, _ := strconv.Atoi(v)
  717. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  718. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  719. itemIndustrialSubjectGroup.IndustrialSubjectId = industrialSubjectId
  720. itemIndustrialSubjectGroup.CreateTime = time.Now()
  721. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  722. if err != nil {
  723. return
  724. }
  725. }
  726. }
  727. return
  728. }
  729. type CygxArticleReport struct {
  730. ArticleId int `description:"文章ID"`
  731. Title string `description:"标题"`
  732. Abstract string `description:"摘要"`
  733. Body string `description:"内容"`
  734. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  735. PublishDate string `description:"发布时间"`
  736. CreateDate time.Time `description:"创建时间"`
  737. LastUpdatedTime time.Time `description:"更新时间"`
  738. ArticleIdMd5 string `description:"ID,md5值"`
  739. SellerAndMobile string `description:"作者(姓名与手机号)"`
  740. SubjectName string `description:"标的名称"`
  741. IndustryName string `description:"产业名称"`
  742. DepartmentId int `description:"作者id"`
  743. ChartPermissionIds string `description:"行业ID ,多个用 , 隔开"`
  744. ArticleTypeId int `description:"文章类型ID"`
  745. ArticleTypeName string `description:"文章类型名称"`
  746. ReportLink string `description:"报告链接"`
  747. ChartPermissionId int `description:"行业id"`
  748. ListIndustrial []*IndustrialActivityGroupManagementRep
  749. ListSubject []*SubjectActivityGroupManagementRep
  750. }
  751. // 通过纪要ID获取文章详情
  752. func GetArticleIdInfoByreportIdEdit(articleId int) (item *CygxArticleReport, err error) {
  753. o := orm.NewOrmUsingDB("hz_cygx")
  754. sql := `SELECT
  755. a.* ,m.industry_name,
  756. GROUP_CONCAT(DISTINCT s.subject_name SEPARATOR ',') AS subject_name
  757. FROM
  758. cygx_article as a
  759. INNER JOIN cygx_industrial_article_group_management as mg ON mg.cygx_article_id = a.id
  760. INNER JOIN cygx_industrial_management as m ON m.industrial_management_id = mg.industrial_management_id
  761. LEFT JOIN cygx_industrial_article_group_subject as sg ON sg.cygx_article_id = a.id
  762. LEFT JOIN cygx_industrial_subject as s ON s.industrial_subject_id = sg.industrial_subject_id
  763. WHERE
  764. a.article_id = ?`
  765. err = o.Raw(sql, articleId).QueryRow(&item)
  766. return
  767. }
  768. // 修改文章关联的标的ID
  769. func UpdateSubjecIds(subjecIds string, industrialManagementId, articleId int) (err error) {
  770. o := orm.NewOrmUsingDB("hz_cygx")
  771. var industrialAndSubjectIds string
  772. industrialAndSubjectIds = strings.Replace(strings.Replace(subjecIds, "{|1|}", "", -1), "{|2|}", "", -1)
  773. fmt.Println(industrialAndSubjectIds)
  774. sql := `UPDATE cygx_article SET subject_ids=? ,industrial_management_id =?, industrial_and_subject_ids = ? WHERE article_id = ?`
  775. _, err = o.Raw(sql, subjecIds, industrialManagementId, industrialAndSubjectIds, articleId).Exec()
  776. return
  777. }
  778. // 删除研选报告,以及相关归类,收藏
  779. func DeleteArticleReport(articleId int) (err error) {
  780. o := orm.NewOrmUsingDB("hz_cygx")
  781. to, err := o.Begin()
  782. if err != nil {
  783. return
  784. }
  785. defer func() {
  786. if err != nil {
  787. fmt.Println(err)
  788. _ = to.Rollback()
  789. } else {
  790. _ = to.Commit()
  791. }
  792. }()
  793. sql := ""
  794. //删除关联产业
  795. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  796. _, err = to.Raw(sql, articleId).Exec()
  797. if err != nil {
  798. return
  799. }
  800. //删除关联标的
  801. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  802. _, err = to.Raw(sql, articleId).Exec()
  803. if err != nil {
  804. return
  805. }
  806. //删除关联收藏
  807. sql = ` DELETE FROM cygx_article_collect WHERE article_id = ?`
  808. _, err = to.Raw(sql, articleId).Exec()
  809. if err != nil {
  810. return
  811. }
  812. //删除阅读记录
  813. sql = ` DELETE FROM cygx_article_history_record WHERE article_id = ?`
  814. _, err = to.Raw(sql, articleId).Exec()
  815. if err != nil {
  816. return
  817. }
  818. //删除阅读记录
  819. sql = ` DELETE FROM cygx_article_history_record_newpv WHERE article_id = ?`
  820. _, err = to.Raw(sql, articleId).Exec()
  821. if err != nil {
  822. return
  823. }
  824. //删除报告
  825. sql = ` DELETE FROM cygx_article WHERE article_id = ?`
  826. _, err = to.Raw(sql, articleId).Exec()
  827. return
  828. }
  829. type AddArticleRoadshowEssenceRep struct {
  830. ArticleId int `description:"文章ID 0 新增,大于0 修改"`
  831. Title string `description:"标题"`
  832. SellerAndMobile string `description:"作者(姓名与手机号)"`
  833. PublishDate string `description:"发布时间"`
  834. ChartPermissionId int `description:"行业ID"`
  835. IndustrialManagementId string `description:"产业id,多个用 , 英文逗号隔开"`
  836. IndustrialSubjectIdStr string `description:"标的id多个用 , 英文逗号隔开"`
  837. Abstract string `description:"摘要"`
  838. Body string `description:"内容"`
  839. ReportLink string `description:"报告链接"`
  840. DoType int `description:"操作方式,1发布,0保存"`
  841. }
  842. // 添加报告文章
  843. func AddArticleRoadshowEssence(item *CygxArticle, industryIds, subjectIds string) (newId int64, err error) {
  844. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  845. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  846. o := orm.NewOrmUsingDB("hz_cygx")
  847. to, err := o.Begin()
  848. if err != nil {
  849. return
  850. }
  851. defer func() {
  852. if err != nil {
  853. _ = to.Rollback()
  854. } else {
  855. _ = to.Commit()
  856. }
  857. }()
  858. newId, err = to.Insert(item) // 新增文章
  859. if err != nil {
  860. return
  861. }
  862. //添加产业与文章的关联
  863. industrialStrList := strings.Split(industryIds, ",")
  864. for _, v := range industrialStrList {
  865. itemIndustrialManagementGroup.CreateTime = time.Now()
  866. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  867. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  868. industryId, _ := strconv.Atoi(v)
  869. itemIndustrialManagementGroup.IndustrialManagementId = industryId
  870. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  871. if err != nil {
  872. return
  873. }
  874. }
  875. //添加标的与文章的关联
  876. if subjectIds != "" {
  877. slice := strings.Split(subjectIds, ",") //标的处理、添加标的与产业的关联、标的与文章的关联
  878. for _, v := range slice {
  879. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  880. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  881. subjectId, _ := strconv.Atoi(v)
  882. itemIndustrialSubjectGroup.IndustrialSubjectId = subjectId
  883. itemIndustrialSubjectGroup.CreateTime = time.Now()
  884. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  885. if err != nil {
  886. return
  887. }
  888. }
  889. }
  890. return
  891. }
  892. // 修改报告文章
  893. func UpdateArticleRoadshowEssence(item *CygxArticle, industryIds, subjectIds string) (err error) {
  894. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  895. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  896. o := orm.NewOrmUsingDB("hz_cygx")
  897. to, err := o.Begin()
  898. if err != nil {
  899. return
  900. }
  901. defer func() {
  902. if err != nil {
  903. _ = to.Rollback()
  904. } else {
  905. _ = to.Commit()
  906. }
  907. }()
  908. newId := item.SummaryManageId
  909. sql := `UPDATE cygx_article SET title=? ,seller_and_mobile =?, chart_permission_ids = ?, abstract = ?, body = ?, body_text = ?, report_link = ? ,have_publish = ? ,publish_status = ? ,periods = ? ,link_article_id = ?,publish_date = ?, category_id = ? ,admin_id =? ,admin_name =? WHERE article_id = ?`
  910. _, err = to.Raw(sql, item.Title, item.SellerAndMobile, item.ChartPermissionIds, item.Abstract, item.Body, item.BodyText, item.ReportLink, item.HavePublish, item.PublishStatus, item.Periods, item.LinkArticleId, item.PublishDate, item.CategoryId, item.AdminId, item.AdminName, item.ArticleId).Exec()
  911. if err != nil {
  912. return
  913. }
  914. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  915. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  916. _, err = to.Raw(sql, item.ArticleId).Exec()
  917. if err != nil {
  918. return
  919. }
  920. //删除文章关联标的
  921. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  922. _, err = to.Raw(sql, item.ArticleId).Exec()
  923. if err != nil {
  924. return
  925. }
  926. //添加产业与文章的关联
  927. industrialStrList := strings.Split(industryIds, ",")
  928. for _, v := range industrialStrList {
  929. itemIndustrialManagementGroup.CreateTime = time.Now()
  930. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  931. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  932. industryId, _ := strconv.Atoi(v)
  933. itemIndustrialManagementGroup.IndustrialManagementId = industryId
  934. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  935. if err != nil {
  936. return
  937. }
  938. }
  939. //添加标的与文章的关联
  940. if subjectIds != "" {
  941. slice := strings.Split(subjectIds, ",") //标的处理、添加标的与产业的关联、标的与文章的关联
  942. for _, v := range slice {
  943. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  944. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  945. subjectId, _ := strconv.Atoi(v)
  946. itemIndustrialSubjectGroup.IndustrialSubjectId = subjectId
  947. itemIndustrialSubjectGroup.CreateTime = time.Now()
  948. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  949. if err != nil {
  950. return
  951. }
  952. }
  953. }
  954. return
  955. }
  956. type ArticleRoadshowEssenceDetail struct {
  957. ArticleId int `description:"文章ID"`
  958. Title string `description:"标题"`
  959. SellerAndMobile string `description:"作者(姓名与手机号)"`
  960. PublishDate string `description:"发布时间"`
  961. ChartPermissionId int `orm:"column(chart_permission_ids);"description:"行业ID"`
  962. PermissionName string `orm:"column(category_name);"description:"行业名称"`
  963. IndustrialManagementId string `description:"产业id,多个用 , 英文逗号隔开"`
  964. IndustryName string `description:"产业名称"`
  965. IndustrialSubjectIdStr string `description:"标的id多个用 , 英文逗号隔开"`
  966. SubjectName string `description:"标的名称"`
  967. Abstract string `description:"摘要"`
  968. Body string `description:"内容"`
  969. ReportLink string `description:"报告链接"`
  970. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  971. }
  972. // 文章详情
  973. func GetArticleRoadshowEssenceDetail(articleId int) (item *ArticleRoadshowEssenceDetail, err error) {
  974. o := orm.NewOrmUsingDB("hz_cygx")
  975. sql := `SELECT
  976. art.* ,
  977. GROUP_CONCAT( DISTINCT mg.industrial_management_id SEPARATOR ',' ) AS industrial_management_id ,
  978. GROUP_CONCAT( DISTINCT m.industry_name SEPARATOR ',' ) AS industry_name,
  979. GROUP_CONCAT( DISTINCT sg.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_id_str ,
  980. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ',' ) AS subject_name
  981. FROM
  982. cygx_article as art
  983. LEFT JOIN cygx_industrial_article_group_management as mg ON mg.article_id = art.article_id
  984. LEFT JOIN cygx_industrial_management as m ON m.industrial_management_id = mg.industrial_management_id
  985. LEFT JOIN cygx_industrial_article_group_subject as sg ON sg.article_id = art.article_id
  986. LEFT JOIN cygx_industrial_subject as s ON s.industrial_subject_id = sg.industrial_subject_id
  987. WHERE
  988. art.article_id = ?`
  989. err = o.Raw(sql, articleId).QueryRow(&item)
  990. return
  991. }
  992. // 列表
  993. func GetArticleRoadshowEssenceList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResearchSummaryRep, err error) {
  994. o := orm.NewOrmUsingDB("hz_cygx")
  995. sql := `SELECT *,
  996. (SELECT COUNT(1) FROM cygx_article_history_record AS h WHERE h.article_id=art.article_id) AS pv,
  997. (SELECT COUNT(DISTINCT user_id) FROM cygx_article_history_record AS h WHERE h.article_id=art.article_id) AS uv
  998. FROM cygx_article as art WHERE 1= 1 `
  999. if condition != "" {
  1000. sql += condition
  1001. }
  1002. sql += ` LIMIT ?,?`
  1003. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  1004. return
  1005. }
  1006. // 列表
  1007. func GetArticlList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxArticle, err error) {
  1008. o := orm.NewOrmUsingDB("hz_cygx")
  1009. sql := `SELECT *
  1010. FROM cygx_article as art WHERE 1= 1 `
  1011. if condition != "" {
  1012. sql += condition
  1013. }
  1014. sql += ` LIMIT ?,?`
  1015. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  1016. return
  1017. }
  1018. // GetArticleListByIdList 根据报告id列表获取报告列表
  1019. func GetArticleListByIdList(articleLIdList []int) (items []*CygxArticle, err error) {
  1020. num := len(articleLIdList)
  1021. if num <= 0 {
  1022. return
  1023. }
  1024. o := orm.NewOrmUsingDB("hz_cygx")
  1025. sql := `SELECT * FROM cygx_article as art WHERE 1= 1 AND article_id in (` + utils.GetOrmInReplace(num) + `)`
  1026. _, err = o.Raw(sql, articleLIdList).QueryRows(&items)
  1027. return
  1028. }
  1029. // RoadshowEssencePublishAndCancel 修改发布状态
  1030. func RoadshowEssencePublishAndCancel(item *CygxResearchSummaryRep) (err error) {
  1031. o := orm.NewOrmUsingDB("hz_cygx")
  1032. sql := `UPDATE cygx_article SET publish_status=? , last_updated_time= ?, periods= ?,admin_id =? ,admin_name =? ,have_publish = 1 WHERE article_id=? `
  1033. _, err = o.Raw(sql, item.PublishStatus, time.Now(), item.Periods, item.AdminId, item.AdminName, item.ArticleId).Exec()
  1034. return
  1035. }
  1036. ////获取数量
  1037. //func GetCygxArticleCountNew(condition string, pars []interface{}) (count int, err error) {
  1038. // sqlCount := ` SELECT COUNT(1) AS count FROM cygx_article as art WHERE 1= 1 `
  1039. // if condition != "" {
  1040. // sqlCount += condition
  1041. // }
  1042. // o := orm.NewOrm()
  1043. // err = o.Raw(sqlCount, pars).QueryRow(&count)
  1044. // return
  1045. //}
  1046. func UpdateArticleInfoVideo(reportId int, tbName, videoUrl, videoName, videoSize string, playSeconds float64) (err error) {
  1047. o := orm.NewOrmUsingDB("hz_cygx")
  1048. sql := `UPDATE ` + tbName + ` SET video_url=?,video_name=?,video_play_seconds=?,video_size=? WHERE article_id=? `
  1049. _, err = o.Raw(sql, videoUrl, videoName, playSeconds, videoSize, reportId).Exec()
  1050. return
  1051. }
  1052. // 客户其他行为数据导出 start
  1053. type CygxArticleCollect struct {
  1054. ArticleId int `description:"文章id"`
  1055. UserId int `description:"用户ID"`
  1056. Title string `description:"标题"`
  1057. CreateTime string `description:"创建时间"`
  1058. PublishDate string `description:"发布时间"`
  1059. PermissionName string `description:"行业"`
  1060. IndustryName string `description:"产业名称"`
  1061. SubjectName string `description:"关联标的"`
  1062. MatchTypeName string `description:"报告类型"`
  1063. CategoryId string `description:"分类ID"`
  1064. }
  1065. type CygxArticleIndustry struct {
  1066. UserId int `description:"用户ID"`
  1067. IndustrialManagementId int `description:"产业id"`
  1068. CreateTime string `description:"创建时间"`
  1069. IndustryName string `description:"产业名称"`
  1070. }
  1071. type ArticleDepartment struct {
  1072. DepartmentId int `description:"主键ID"`
  1073. NickName string `description:"昵称"`
  1074. UserId int `description:"用户ID"`
  1075. IndustrialManagementId int `description:"产业id"`
  1076. CreateTime string `description:"创建时间"`
  1077. IndustryName string `description:"产业名称"`
  1078. }
  1079. type KeyWord struct {
  1080. UserId int `description:"用户ID"`
  1081. CreateTime string `description:"创建时间"`
  1082. KeyWord string `description:"关键词"`
  1083. }
  1084. type CompanyOtherHistoryList struct {
  1085. Mobile string `description:"手机号"`
  1086. Email string `description:"邮箱"`
  1087. RealName string `description:"姓名"`
  1088. ListArticle []*CygxArticleCollect
  1089. ListIndustrial []*CygxArticleIndustry
  1090. ListDepartment []*ArticleDepartment
  1091. ListKeyWord []*KeyWord
  1092. }
  1093. type CompanyOtherHistoryListResp struct {
  1094. List []*CompanyOtherHistoryList
  1095. }
  1096. // 文章列表
  1097. func GetArticleCollectList(condition string) (items []*CygxArticleCollect, err error) {
  1098. o := orm.NewOrmUsingDB("hz_cygx")
  1099. sql := `SELECT
  1100. c.*,
  1101. a.title,
  1102. a.publish_date,
  1103. a.category_id,
  1104. a.match_type_name,
  1105. (SELECT
  1106. GROUP_CONCAT( DISTINCT m.industry_name SEPARATOR ',' ) AS industry_name
  1107. FROM
  1108. cygx_industrial_management AS m
  1109. WHERE
  1110. industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_article_group_management AS mg WHERE mg.article_id = c.article_id )) AS industry_name,
  1111. (SELECT
  1112. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ',' ) AS subject_name
  1113. FROM
  1114. cygx_industrial_subject AS s
  1115. WHERE
  1116. industrial_subject_id IN ( SELECT industrial_subject_id FROM cygx_industrial_article_group_subject AS sg WHERE sg.article_id = c.article_id )) AS subject_name
  1117. FROM
  1118. cygx_article_collect AS c
  1119. INNER JOIN cygx_article AS a ON a.article_id = c.article_id
  1120. WHERE 1=1`
  1121. if condition != "" {
  1122. sql += condition
  1123. }
  1124. _, err = o.Raw(sql).QueryRows(&items)
  1125. return
  1126. }
  1127. // 产业列表
  1128. func GetCygxIndustryList(companyId int) (items []*CygxArticleIndustry, err error) {
  1129. o := orm.NewOrmUsingDB("hz_cygx")
  1130. sql := `SELECT
  1131. f.user_id,f.create_time,m.industrial_management_id,m.industry_name
  1132. FROM
  1133. cygx_industry_fllow AS f
  1134. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = f.industrial_management_id
  1135. WHERE
  1136. 1 = 1
  1137. AND f.company_id = ?`
  1138. _, err = o.Raw(sql, companyId).QueryRows(&items)
  1139. return
  1140. }
  1141. // 作者列表
  1142. func GetArticleDepartmentList(companyId int) (items []*ArticleDepartment, err error) {
  1143. o := orm.NewOrmUsingDB("hz_cygx")
  1144. sql := `SELECT
  1145. f.user_id,f.create_time,m.department_id,m.nick_name,
  1146. (SELECT
  1147. GROUP_CONCAT( DISTINCT m.industry_name SEPARATOR ',' ) AS industry_name
  1148. FROM
  1149. cygx_industrial_management AS m
  1150. WHERE
  1151. industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_article_group_management AS mg WHERE mg.article_id IN(SELECT article_id FROM cygx_article WHERE department_id = f.department_id) )) AS industry_name
  1152. FROM
  1153. cygx_article_department_follow AS f
  1154. INNER JOIN cygx_article_department AS m ON m.department_id = f.department_id
  1155. WHERE
  1156. 1 = 1
  1157. AND f.company_id = ?`
  1158. _, err = o.Raw(sql, companyId).QueryRows(&items)
  1159. return
  1160. }
  1161. // 关键词列表
  1162. func GetCygxSearchKeyWordList(userIdStr string) (items []*KeyWord, err error) {
  1163. o := orm.NewOrmUsingDB("hz_cygx")
  1164. sql := `SELECT * FROM cygx_search_key_word WHERE user_id IN (` + userIdStr + `)`
  1165. _, err = o.Raw(sql).QueryRows(&items)
  1166. return
  1167. }
  1168. // 关键词列表
  1169. func GetCygxUserSearchKeyWordList(userIdStr string) (items []*KeyWord, err error) {
  1170. o := orm.NewOrmUsingDB("hz_cygx")
  1171. sql := `SELECT * FROM cygx_user_search_key_word WHERE user_id IN (` + userIdStr + `) AND page_type IN ('ReortSearch','HomeSearch')`
  1172. _, err = o.Raw(sql).QueryRows(&items)
  1173. return
  1174. } //end
  1175. type CreateTimesResp struct {
  1176. CreateTimes string `description:"创建时间"`
  1177. }
  1178. type CompanyArticleCountResp struct {
  1179. CreateTimes string `description:"创建时间"`
  1180. ReadSum int `description:"总阅读数"`
  1181. YiyaoSum int `description:"医药阅读数"`
  1182. XiaofeiSum int `description:"医药阅读数"`
  1183. KejiSum int `description:"医药阅读数"`
  1184. ZhizaoSum int `description:"医药阅读数"`
  1185. CelueSum int `description:"医药阅读数"`
  1186. YanxuanSum int `description:"医药阅读数"`
  1187. }
  1188. type CompanyArticleCountListResp struct {
  1189. List []*CompanyArticleCountResp
  1190. }
  1191. func GetCompanyHistoryRecordPvGroupDate(mobiles, emails string) (item []*CreateTimesResp, err error) {
  1192. o := orm.NewOrmUsingDB("hz_cygx")
  1193. sql := ` SELECT date_format(create_time,'%Y-%m') as create_times FROM cygx_article_history_record_all AS h
  1194. INNER JOIN cygx_article art ON art.article_id = h.article_id
  1195. WHERE h.mobile IN (` + mobiles + `) AND h.is_del = 0 OR( h.email IN (` + emails + `) AND h.email <>'' AND h.is_del = 0 ) GROUP BY create_times ORDER BY create_times DESC `
  1196. _, err = o.Raw(sql).QueryRows(&item)
  1197. return
  1198. }
  1199. func GetCompanyHistoryRecordPv(mobiles, emails string) (item []*CompanyHistoryRecordNewPvRep, err error) {
  1200. o := orm.NewOrmUsingDB("hz_cygx")
  1201. sql := ` SELECT
  1202. a.title,
  1203. a.category_id,
  1204. date_format(h.create_time,'%Y-%m') as create_time,
  1205. m.chart_permission_name as permission_name
  1206. FROM
  1207. cygx_article_history_record_all AS h
  1208. INNER JOIN cygx_article AS a ON a.article_id = h.article_id
  1209. LEFT JOIN cygx_report_mapping AS m ON a.category_id = m.category_id
  1210. WHERE h.mobile IN (` + mobiles + `) AND h.is_del = 0 OR( h.email IN (` + emails + `) AND h.email <>'' AND h.is_del = 0 )
  1211. ORDER BY
  1212. h.create_time DESC `
  1213. _, err = o.Raw(sql).QueryRows(&item)
  1214. return
  1215. }
  1216. type CygxCelueArticleHistoryRecord struct {
  1217. Id int `orm:"column(id);pk"`
  1218. ArticleId int `description:"文章ID"`
  1219. CelueHistoryId int `description:"策略平台记录的ID"`
  1220. CreateTime string `description:"本地创建时间"`
  1221. CreateDateApi time.Time `description:"图表创建时间"`
  1222. Mobile string `description:"手机号"`
  1223. CompanyName string `description:"公司名称"`
  1224. RealName string `description:"用户姓名"`
  1225. }
  1226. func GetCygxCelueArticleHistoryRecordPvAll(articleIds string) (item []*ArticleHistoryRep, err error) {
  1227. o := orm.NewOrmUsingDB("hz_cygx")
  1228. sql := `SELECT * FROM cygx_article_history_record_all as h WHERE article_id IN ( ` + articleIds + ` ) AND h.is_del = 0 AND h.company_id != 16 AND h.platfor = 2 `
  1229. sql += ` group by mobile ORDER BY create_time DESC `
  1230. _, err = o.Raw(sql).QueryRows(&item)
  1231. return
  1232. }
  1233. func GetCygxCelueArticleHistoryRecordPvAll_H(articleIds string) (item []*ArticleHistoryRep, err error) {
  1234. o := orm.NewOrmUsingDB("hz_cygx")
  1235. sql := `SELECT * FROM cygx_article_history_record_all as h WHERE article_id IN ( ` + articleIds + ` ) AND h.is_del = 0 AND h.company_id != 16 AND h.platfor = 2 AND h.create_time <'2024-11-21 15:10' `
  1236. sql += ` group by mobile ORDER BY create_time DESC `
  1237. _, err = o.Raw(sql).QueryRows(&item)
  1238. return
  1239. }
  1240. func GetCygxCelueArticleComapnyName(mobiles string) (item []*ArticleHistoryRep, err error) {
  1241. o := orm.NewOrm()
  1242. sql := `SELECT
  1243. c.company_name,a.real_name,u.mobile
  1244. FROM
  1245. wx_user AS u
  1246. INNER JOIN company as c ON c.company_id = u.company_id
  1247. INNER JOIN company_product as p ON p.company_id = c.company_id
  1248. INNER JOIN admin as a On a.admin_id = p.seller_id
  1249. WHERE p.product_id = 2
  1250. AND u.mobile IN ( ` + mobiles + `) GROUP BY u.mobile `
  1251. _, err = o.Raw(sql).QueryRows(&item)
  1252. return
  1253. }
  1254. type ArticleDetailResp struct {
  1255. ArticleId int `description:"文章ID"`
  1256. Title string `description:"标题"`
  1257. Abstract string `description:"摘要"`
  1258. Body string `description:"内容"`
  1259. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  1260. PublishDate string `description:"发布时间"`
  1261. CreateDate time.Time `description:"创建时间"`
  1262. LastUpdatedTime time.Time `description:"更新时间"`
  1263. ArticleIdMd5 string `description:"ID,md5值"`
  1264. SellerAndMobile string `description:"作者(姓名与手机号)"`
  1265. SubjectName string `description:"标的名称"`
  1266. IndustryName string `description:"产业名称"`
  1267. DepartmentId int `description:"作者id"`
  1268. ChartPermissionIds string `description:"行业ID ,多个用 , 隔开"`
  1269. ArticleTypeId int `description:"文章类型ID"`
  1270. ArticleTypeName string `description:"文章类型名称"`
  1271. ListIndustrial []*IndustrialActivityGroupManagementRep
  1272. ListSubject []*SubjectActivityGroupManagementRep
  1273. ImgUrl string `description:"头像url"`
  1274. NickName string `description:"昵称"`
  1275. ReportLink string `description:"报告链接"`
  1276. }
  1277. // GetArticleIdsFromIndustryAndSubjectGroupByKeyword 产业/标的关键词获取文章IDs
  1278. func GetArticleIdsFromIndustryAndSubjectGroupByKeyword(keyword string) (ids []int, err error) {
  1279. o := orm.NewOrmUsingDB("hz_cygx")
  1280. sql := `SELECT DISTINCT
  1281. mg.article_id
  1282. FROM
  1283. cygx_industrial_article_group_management AS mg
  1284. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  1285. WHERE
  1286. 1 = 1
  1287. AND m.industry_name LIKE ?
  1288. UNION
  1289. SELECT DISTINCT
  1290. sg.article_id
  1291. FROM
  1292. cygx_industrial_article_group_subject AS sg
  1293. INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = sg.industrial_subject_id
  1294. WHERE
  1295. 1 = 1
  1296. AND s.subject_name LIKE ?`
  1297. _, err = o.Raw(sql, keyword, keyword).QueryRows(&ids)
  1298. return
  1299. }
  1300. type SummaryArticleStock struct {
  1301. Id int `description:"新ID"`
  1302. ArticleId int `description:"文章id"`
  1303. Stock string `description:"个股标签"`
  1304. }
  1305. // 综述报告
  1306. func GetArticleStock() (items []*SummaryArticleStock, err error) {
  1307. o := orm.NewOrmUsingDB("hz_cygx")
  1308. sql := `SELECT
  1309. stock,article_id
  1310. FROM
  1311. cygx_article AS art
  1312. WHERE
  1313. 1 = 1
  1314. AND type_name = '综述报告' `
  1315. _, err = o.Raw(sql).QueryRows(&items)
  1316. return
  1317. }