report_article.go 50 KB

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