report_article.go 50 KB

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