report_article.go 49 KB

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