report_article.go 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386
  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. Abstract string `description:"摘要"`
  438. CategoryName string `description:"一级分类"`
  439. SubCategoryName string `description:"二级分类"`
  440. MatchTypeName string `description:"匹配类型"`
  441. IsCollect bool `description:"是否收藏:true,已收藏,false:未收藏"`
  442. IsInterviewApply bool `description:"是否申请访谈:true,已申请,false:未申请"`
  443. BodyText string `description:"内容"`
  444. InterviewApplyStatus string `description:"当前访谈申请状态:'待邀请','待访谈','已完成','已取消'"`
  445. InterviewDate string `description:"访谈时间"`
  446. ExpertBackground string `description:"专家背景"`
  447. ExpertNumber string `description:"专家编号"`
  448. Department string `description:"作者"`
  449. ArticleIdMd5 string `description:"纪要id"`
  450. IsClass int `description:"是否归类,1是,0否"`
  451. IsSummary int `description:"是否是纪要库,1是,0否"`
  452. CategoryId int `description:"分类ID"`
  453. FileLink string `description:"下载预览链接"`
  454. ReportType int `description:"报告类型,2产业报告,1行业报告"`
  455. TypeName string `description:"策略平台类型字段名称"`
  456. ArticleTypeId int `description:"文章类型ID"`
  457. ArticleTypeName string `description:"文章类型名称"`
  458. }
  459. func GetArticleDetailById(articleId int) (item *ArticleDetail, err error) {
  460. o := orm.NewOrmUsingDB("hz_cygx")
  461. sql := `SELECT * FROM cygx_article WHERE id = ? `
  462. err = o.Raw(sql, articleId).QueryRow(&item)
  463. return
  464. }
  465. func GetArticleDetailByArticleId(articleId int) (item *ArticleDetail, err error) {
  466. o := orm.NewOrmUsingDB("hz_cygx")
  467. sql := `SELECT * FROM cygx_article WHERE article_id = ? `
  468. err = o.Raw(sql, articleId).QueryRow(&item)
  469. return
  470. }
  471. // 修改报告匹配类型
  472. type UpdateReportMatchTypeNameRep struct {
  473. MatchID int `orm:"column(id);"description:"匹配ID"`
  474. ReportId int `description:"报告id"`
  475. }
  476. // 手动修改匹配类型
  477. func UpdateReportMatchTypeName(matchTypeName string, reportType, categoryId, reportId, isSummary, isClass int) (err error) {
  478. o := orm.NewOrmUsingDB("hz_cygx")
  479. to, err := o.Begin()
  480. if err != nil {
  481. return
  482. }
  483. defer func() {
  484. if err != nil {
  485. fmt.Println(err)
  486. _ = to.Rollback()
  487. } else {
  488. _ = to.Commit()
  489. }
  490. }()
  491. sql := ""
  492. //fmt.Println(sql)
  493. if isSummary == 0 {
  494. //删除关联产业
  495. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE cygx_article_id = ?`
  496. _, err = to.Raw(sql, reportId).Exec()
  497. if err != nil {
  498. return
  499. }
  500. //删除关联标的
  501. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE cygx_article_id = ?`
  502. _, err = to.Raw(sql, reportId).Exec()
  503. if err != nil {
  504. return
  505. }
  506. }
  507. //修改文章是否过滤字段
  508. if reportType == 1 {
  509. sql = `UPDATE cygx_article SET match_type_name=?, report_type=? ,category_id=?, is_class = 1, is_custom = 1 WHERE id=? `
  510. } else {
  511. sql = `UPDATE cygx_article SET match_type_name=?, report_type=? ,category_id=?, is_class = 0, is_custom = 1 WHERE id=? `
  512. }
  513. if isSummary == 1 && isClass == 1 {
  514. sql = `UPDATE cygx_article SET match_type_name=?, report_type=? ,category_id=?, is_class = 1, is_custom = 1 WHERE id=? `
  515. }
  516. _, err = to.Raw(sql, matchTypeName, reportType, categoryId, reportId).Exec()
  517. return
  518. }
  519. func GetArticleDetailByMd5Id(md5Id string) (item *ArticleDetail, err error) {
  520. o := orm.NewOrmUsingDB("hz_cygx")
  521. sql := `SELECT *FROM cygx_article WHERE article_id_md5 = ? `
  522. err = o.Raw(sql, md5Id).QueryRow(&item)
  523. return
  524. }
  525. type ReportAddRep struct {
  526. ArticleId int `description:"报告id"`
  527. Title string `description:"标题"`
  528. Abstract string `description:"摘要"`
  529. Body string `description:"内容"`
  530. DoType int `description:"操作类型 0,保存 、1,发布"`
  531. SellerAndMobile string `description:"作者"`
  532. ChartPermissionId int `description:"行业id"`
  533. IndustrialManagementIds string `description:"产业id 多个用 , 隔开"`
  534. IndustrialSubjectIds string `description:"标的id 多个用 , 隔开"`
  535. PublishDate string `description:"发布时间 列如 2020-03-23"`
  536. }
  537. // 添加报告文章
  538. func AddAReportrticle(item *CygxArticle, chartPermissionId int, industryName, subjectName string, itemDepartment *CygxArticleDepartment, industrialManagementIds, industrialSubjectIds string) (newId int64, err error) {
  539. var newDepartmentId int64
  540. var total int
  541. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  542. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  543. o := orm.NewOrmUsingDB("hz_cygx")
  544. to, err := o.Begin()
  545. if err != nil {
  546. return
  547. }
  548. defer func() {
  549. if err != nil {
  550. _ = to.Rollback()
  551. } else {
  552. _ = to.Commit()
  553. }
  554. }()
  555. if itemDepartment.NickName != "" {
  556. //判断作者是否存在,如果没有则新增
  557. total, err = GetArticleDepartmentCount(itemDepartment.NickName, itemDepartment.Remarks)
  558. if err != nil {
  559. return
  560. }
  561. if total == 0 {
  562. newDepartmentId, err = to.Insert(itemDepartment)
  563. if err != nil {
  564. return
  565. }
  566. } else {
  567. departmentDetail := new(CygxArticleDepartmentRep)
  568. departmentDetail, err = GetArticleDepartmentDateil(itemDepartment.NickName, itemDepartment.Remarks)
  569. if err != nil {
  570. return
  571. }
  572. newDepartmentId = int64(departmentDetail.DepartmentId)
  573. }
  574. item.DepartmentId = int(newDepartmentId)
  575. }
  576. newId, err = to.Insert(item) // 新增文章
  577. if err != nil {
  578. return
  579. }
  580. //添加产业与文章的关联
  581. industrialManagementIdList := strings.Split(industrialManagementIds, ",")
  582. for _, v := range industrialManagementIdList {
  583. newIndustrialId, _ := strconv.Atoi(v)
  584. itemIndustrialManagementGroup.CreateTime = time.Now()
  585. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  586. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  587. itemIndustrialManagementGroup.IndustrialManagementId = newIndustrialId
  588. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  589. if err != nil {
  590. return
  591. }
  592. }
  593. //添加标的与文章的关联
  594. if industrialSubjectIds != "" {
  595. industrialSubjectIdList := strings.Split(industrialSubjectIds, ",")
  596. for _, v := range industrialSubjectIdList {
  597. industrialSubjectId, _ := strconv.Atoi(v)
  598. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  599. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  600. itemIndustrialSubjectGroup.IndustrialSubjectId = industrialSubjectId
  601. itemIndustrialSubjectGroup.CreateTime = time.Now()
  602. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  603. if err != nil {
  604. return
  605. }
  606. }
  607. }
  608. return
  609. }
  610. // 修改报告文章
  611. func EditReportrticle(item *CygxArticle, chartPermissionId int, industryName, subjectName string, oldPublishStatus int, itemDepartment *CygxArticleDepartment, industrialManagementIds, industrialSubjectIds string) (err error) {
  612. var sql string
  613. var newDepartmentId int64
  614. var total int
  615. newId := item.SummaryManageId
  616. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  617. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  618. o := orm.NewOrmUsingDB("hz_cygx")
  619. to, err := o.Begin()
  620. if err != nil {
  621. return
  622. }
  623. defer func() {
  624. if err != nil {
  625. _ = to.Rollback()
  626. } else {
  627. _ = to.Commit()
  628. }
  629. }()
  630. if itemDepartment.NickName != "" {
  631. //判断作者是否存在,如果没有则新增
  632. total, err = GetArticleDepartmentCount(itemDepartment.NickName, itemDepartment.Remarks)
  633. if err != nil {
  634. return
  635. }
  636. if total == 0 {
  637. newDepartmentId, err = to.Insert(itemDepartment)
  638. if err != nil {
  639. return
  640. }
  641. } else {
  642. departmentDetail := new(CygxArticleDepartmentRep)
  643. departmentDetail, err = GetArticleDepartmentDateil(itemDepartment.NickName, itemDepartment.Remarks)
  644. if err != nil {
  645. return
  646. }
  647. newDepartmentId = int64(departmentDetail.DepartmentId)
  648. }
  649. item.DepartmentId = int(newDepartmentId)
  650. }
  651. sql = ` UPDATE cygx_article SET
  652. category_name=?,
  653. title=?,
  654. abstract=?,
  655. body=?,
  656. body_text=?,
  657. publish_status=?,
  658. last_updated_time = ?,
  659. seller_and_mobile=?,
  660. expert_background =?,
  661. expert_number=? ,
  662. interview_date=?,
  663. file_link=? ,
  664. chart_permission_ids =?,
  665. article_type_id =?,
  666. article_type_name =?,
  667. admin_id =?,
  668. admin_name =?,
  669. is_summary =?,
  670. is_report =?,
  671. department_id =?,
  672. publish_date =?,
  673. report_link =?
  674. WHERE article_id =?`
  675. _, 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()
  676. if err != nil {
  677. return
  678. }
  679. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  680. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  681. _, err = to.Raw(sql, item.ArticleId).Exec()
  682. if err != nil {
  683. return
  684. }
  685. //删除文章关联标的
  686. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  687. _, err = to.Raw(sql, item.ArticleId).Exec()
  688. if err != nil {
  689. return
  690. }
  691. //添加产业与文章的关联
  692. industrialManagementIdList := strings.Split(industrialManagementIds, ",")
  693. for _, v := range industrialManagementIdList {
  694. newIndustrialId, _ := strconv.Atoi(v)
  695. itemIndustrialManagementGroup.CreateTime = time.Now()
  696. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  697. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  698. itemIndustrialManagementGroup.IndustrialManagementId = newIndustrialId
  699. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  700. if err != nil {
  701. return
  702. }
  703. }
  704. //添加标的与文章的关联
  705. if industrialSubjectIds != "" {
  706. industrialSubjectIdList := strings.Split(industrialSubjectIds, ",")
  707. for _, v := range industrialSubjectIdList {
  708. industrialSubjectId, _ := strconv.Atoi(v)
  709. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  710. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  711. itemIndustrialSubjectGroup.IndustrialSubjectId = industrialSubjectId
  712. itemIndustrialSubjectGroup.CreateTime = time.Now()
  713. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  714. if err != nil {
  715. return
  716. }
  717. }
  718. }
  719. return
  720. }
  721. type CygxArticleReport struct {
  722. ArticleId int `description:"文章ID"`
  723. Title string `description:"标题"`
  724. Abstract string `description:"摘要"`
  725. Body string `description:"内容"`
  726. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  727. PublishDate string `description:"发布时间"`
  728. CreateDate time.Time `description:"创建时间"`
  729. LastUpdatedTime time.Time `description:"更新时间"`
  730. ArticleIdMd5 string `description:"ID,md5值"`
  731. SellerAndMobile string `description:"作者(姓名与手机号)"`
  732. SubjectName string `description:"标的名称"`
  733. IndustryName string `description:"产业名称"`
  734. DepartmentId int `description:"作者id"`
  735. ChartPermissionIds string `description:"行业ID ,多个用 , 隔开"`
  736. ArticleTypeId int `description:"文章类型ID"`
  737. ArticleTypeName string `description:"文章类型名称"`
  738. ReportLink string `description:"报告链接"`
  739. ChartPermissionId int `description:"行业id"`
  740. ListIndustrial []*IndustrialActivityGroupManagementRep
  741. ListSubject []*SubjectActivityGroupManagementRep
  742. }
  743. // 通过纪要ID获取文章详情
  744. func GetArticleIdInfoByreportIdEdit(articleId int) (item *CygxArticleReport, err error) {
  745. o := orm.NewOrmUsingDB("hz_cygx")
  746. sql := `SELECT
  747. a.* ,m.industry_name,
  748. GROUP_CONCAT(DISTINCT s.subject_name SEPARATOR ',') AS subject_name
  749. FROM
  750. cygx_article as a
  751. INNER JOIN cygx_industrial_article_group_management as mg ON mg.cygx_article_id = a.id
  752. INNER JOIN cygx_industrial_management as m ON m.industrial_management_id = mg.industrial_management_id
  753. LEFT JOIN cygx_industrial_article_group_subject as sg ON sg.cygx_article_id = a.id
  754. LEFT JOIN cygx_industrial_subject as s ON s.industrial_subject_id = sg.industrial_subject_id
  755. WHERE
  756. a.article_id = ?`
  757. err = o.Raw(sql, articleId).QueryRow(&item)
  758. return
  759. }
  760. // 修改文章关联的标的ID
  761. func UpdateSubjecIds(subjecIds string, industrialManagementId, articleId int) (err error) {
  762. o := orm.NewOrmUsingDB("hz_cygx")
  763. var industrialAndSubjectIds string
  764. industrialAndSubjectIds = strings.Replace(strings.Replace(subjecIds, "{|1|}", "", -1), "{|2|}", "", -1)
  765. fmt.Println(industrialAndSubjectIds)
  766. sql := `UPDATE cygx_article SET subject_ids=? ,industrial_management_id =?, industrial_and_subject_ids = ? WHERE article_id = ?`
  767. _, err = o.Raw(sql, subjecIds, industrialManagementId, industrialAndSubjectIds, articleId).Exec()
  768. return
  769. }
  770. // 删除研选报告,以及相关归类,收藏
  771. func DeleteArticleReport(articleId int) (err error) {
  772. o := orm.NewOrmUsingDB("hz_cygx")
  773. to, err := o.Begin()
  774. if err != nil {
  775. return
  776. }
  777. defer func() {
  778. if err != nil {
  779. fmt.Println(err)
  780. _ = to.Rollback()
  781. } else {
  782. _ = to.Commit()
  783. }
  784. }()
  785. sql := ""
  786. //删除关联产业
  787. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  788. _, err = to.Raw(sql, articleId).Exec()
  789. if err != nil {
  790. return
  791. }
  792. //删除关联标的
  793. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  794. _, err = to.Raw(sql, articleId).Exec()
  795. if err != nil {
  796. return
  797. }
  798. //删除关联收藏
  799. sql = ` DELETE FROM cygx_article_collect WHERE article_id = ?`
  800. _, err = to.Raw(sql, articleId).Exec()
  801. if err != nil {
  802. return
  803. }
  804. //删除阅读记录
  805. sql = ` DELETE FROM cygx_article_history_record WHERE article_id = ?`
  806. _, err = to.Raw(sql, articleId).Exec()
  807. if err != nil {
  808. return
  809. }
  810. //删除阅读记录
  811. sql = ` DELETE FROM cygx_article_history_record_newpv WHERE article_id = ?`
  812. _, err = to.Raw(sql, articleId).Exec()
  813. if err != nil {
  814. return
  815. }
  816. //删除报告
  817. sql = ` DELETE FROM cygx_article WHERE article_id = ?`
  818. _, err = to.Raw(sql, articleId).Exec()
  819. return
  820. }
  821. type AddArticleRoadshowEssenceRep struct {
  822. ArticleId int `description:"文章ID 0 新增,大于0 修改"`
  823. Title string `description:"标题"`
  824. SellerAndMobile string `description:"作者(姓名与手机号)"`
  825. PublishDate string `description:"发布时间"`
  826. ChartPermissionId int `description:"行业ID"`
  827. IndustrialManagementId string `description:"产业id,多个用 , 英文逗号隔开"`
  828. IndustrialSubjectIdStr string `description:"标的id多个用 , 英文逗号隔开"`
  829. Abstract string `description:"摘要"`
  830. Body string `description:"内容"`
  831. ReportLink string `description:"报告链接"`
  832. DoType int `description:"操作方式,1发布,0保存"`
  833. }
  834. // 添加报告文章
  835. func AddArticleRoadshowEssence(item *CygxArticle, industryIds, subjectIds string) (newId int64, err error) {
  836. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  837. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  838. o := orm.NewOrmUsingDB("hz_cygx")
  839. to, err := o.Begin()
  840. if err != nil {
  841. return
  842. }
  843. defer func() {
  844. if err != nil {
  845. _ = to.Rollback()
  846. } else {
  847. _ = to.Commit()
  848. }
  849. }()
  850. newId, err = to.Insert(item) // 新增文章
  851. if err != nil {
  852. return
  853. }
  854. //添加产业与文章的关联
  855. industrialStrList := strings.Split(industryIds, ",")
  856. for _, v := range industrialStrList {
  857. itemIndustrialManagementGroup.CreateTime = time.Now()
  858. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  859. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  860. industryId, _ := strconv.Atoi(v)
  861. itemIndustrialManagementGroup.IndustrialManagementId = industryId
  862. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  863. if err != nil {
  864. return
  865. }
  866. }
  867. //添加标的与文章的关联
  868. if subjectIds != "" {
  869. slice := strings.Split(subjectIds, ",") //标的处理、添加标的与产业的关联、标的与文章的关联
  870. for _, v := range slice {
  871. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  872. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  873. subjectId, _ := strconv.Atoi(v)
  874. itemIndustrialSubjectGroup.IndustrialSubjectId = subjectId
  875. itemIndustrialSubjectGroup.CreateTime = time.Now()
  876. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  877. if err != nil {
  878. return
  879. }
  880. }
  881. }
  882. return
  883. }
  884. // 修改报告文章
  885. func UpdateArticleRoadshowEssence(item *CygxArticle, industryIds, subjectIds string) (err error) {
  886. itemIndustrialManagementGroup := new(CygxIndustrialArticleGroupManagement)
  887. itemIndustrialSubjectGroup := new(CygxIndustrialArticleGroupSubject)
  888. o := orm.NewOrmUsingDB("hz_cygx")
  889. to, err := o.Begin()
  890. if err != nil {
  891. return
  892. }
  893. defer func() {
  894. if err != nil {
  895. _ = to.Rollback()
  896. } else {
  897. _ = to.Commit()
  898. }
  899. }()
  900. newId := item.SummaryManageId
  901. 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 = ?`
  902. _, 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()
  903. if err != nil {
  904. return
  905. }
  906. //删除文章关联行业 (避免截断表时产生的脏数据,故不用update而是先删除再增加)
  907. sql = ` DELETE FROM cygx_industrial_article_group_management WHERE article_id = ?`
  908. _, err = to.Raw(sql, item.ArticleId).Exec()
  909. if err != nil {
  910. return
  911. }
  912. //删除文章关联标的
  913. sql = ` DELETE FROM cygx_industrial_article_group_subject WHERE article_id = ?`
  914. _, err = to.Raw(sql, item.ArticleId).Exec()
  915. if err != nil {
  916. return
  917. }
  918. //添加产业与文章的关联
  919. industrialStrList := strings.Split(industryIds, ",")
  920. for _, v := range industrialStrList {
  921. itemIndustrialManagementGroup.CreateTime = time.Now()
  922. itemIndustrialManagementGroup.CygxArticleId = int(newId)
  923. itemIndustrialManagementGroup.ArticleId = item.ArticleId
  924. industryId, _ := strconv.Atoi(v)
  925. itemIndustrialManagementGroup.IndustrialManagementId = industryId
  926. _, err = AddCygxIndustrialArticleGroupManagement(itemIndustrialManagementGroup)
  927. if err != nil {
  928. return
  929. }
  930. }
  931. //添加标的与文章的关联
  932. if subjectIds != "" {
  933. slice := strings.Split(subjectIds, ",") //标的处理、添加标的与产业的关联、标的与文章的关联
  934. for _, v := range slice {
  935. itemIndustrialSubjectGroup.CygxArticleId = int(newId)
  936. itemIndustrialSubjectGroup.ArticleId = item.ArticleId
  937. subjectId, _ := strconv.Atoi(v)
  938. itemIndustrialSubjectGroup.IndustrialSubjectId = subjectId
  939. itemIndustrialSubjectGroup.CreateTime = time.Now()
  940. _, err = AddCygxIndustrialArticleGroupSubject(itemIndustrialSubjectGroup)
  941. if err != nil {
  942. return
  943. }
  944. }
  945. }
  946. return
  947. }
  948. type ArticleRoadshowEssenceDetail struct {
  949. ArticleId int `description:"文章ID"`
  950. Title string `description:"标题"`
  951. SellerAndMobile string `description:"作者(姓名与手机号)"`
  952. PublishDate string `description:"发布时间"`
  953. ChartPermissionId int `orm:"column(chart_permission_ids);"description:"行业ID"`
  954. PermissionName string `orm:"column(category_name);"description:"行业名称"`
  955. IndustrialManagementId string `description:"产业id,多个用 , 英文逗号隔开"`
  956. IndustryName string `description:"产业名称"`
  957. IndustrialSubjectIdStr string `description:"标的id多个用 , 英文逗号隔开"`
  958. SubjectName string `description:"标的名称"`
  959. Abstract string `description:"摘要"`
  960. Body string `description:"内容"`
  961. ReportLink string `description:"报告链接"`
  962. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  963. }
  964. // 文章详情
  965. func GetArticleRoadshowEssenceDetail(articleId int) (item *ArticleRoadshowEssenceDetail, err error) {
  966. o := orm.NewOrmUsingDB("hz_cygx")
  967. sql := `SELECT
  968. art.* ,
  969. GROUP_CONCAT( DISTINCT mg.industrial_management_id SEPARATOR ',' ) AS industrial_management_id ,
  970. GROUP_CONCAT( DISTINCT m.industry_name SEPARATOR ',' ) AS industry_name,
  971. GROUP_CONCAT( DISTINCT sg.industrial_subject_id SEPARATOR ',' ) AS industrial_subject_id_str ,
  972. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ',' ) AS subject_name
  973. FROM
  974. cygx_article as art
  975. LEFT JOIN cygx_industrial_article_group_management as mg ON mg.article_id = art.article_id
  976. LEFT JOIN cygx_industrial_management as m ON m.industrial_management_id = mg.industrial_management_id
  977. LEFT JOIN cygx_industrial_article_group_subject as sg ON sg.article_id = art.article_id
  978. LEFT JOIN cygx_industrial_subject as s ON s.industrial_subject_id = sg.industrial_subject_id
  979. WHERE
  980. art.article_id = ?`
  981. err = o.Raw(sql, articleId).QueryRow(&item)
  982. return
  983. }
  984. // 列表
  985. func GetArticleRoadshowEssenceList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResearchSummaryRep, err error) {
  986. o := orm.NewOrmUsingDB("hz_cygx")
  987. sql := `SELECT *,
  988. (SELECT COUNT(1) FROM cygx_article_history_record AS h WHERE h.article_id=art.article_id) AS pv,
  989. (SELECT COUNT(DISTINCT user_id) FROM cygx_article_history_record AS h WHERE h.article_id=art.article_id) AS uv
  990. FROM cygx_article as art WHERE 1= 1 `
  991. if condition != "" {
  992. sql += condition
  993. }
  994. sql += ` LIMIT ?,?`
  995. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  996. return
  997. }
  998. // 列表
  999. func GetArticlList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxArticle, err error) {
  1000. o := orm.NewOrmUsingDB("hz_cygx")
  1001. sql := `SELECT *
  1002. FROM cygx_article as art WHERE 1= 1 `
  1003. if condition != "" {
  1004. sql += condition
  1005. }
  1006. sql += ` LIMIT ?,?`
  1007. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  1008. return
  1009. }
  1010. // GetArticleListByIdList 根据报告id列表获取报告列表
  1011. func GetArticleListByIdList(articleLIdList []int) (items []*CygxArticle, err error) {
  1012. num := len(articleLIdList)
  1013. if num <= 0 {
  1014. return
  1015. }
  1016. o := orm.NewOrmUsingDB("hz_cygx")
  1017. sql := `SELECT * FROM cygx_article as art WHERE 1= 1 AND article_id in (` + utils.GetOrmInReplace(num) + `)`
  1018. _, err = o.Raw(sql, articleLIdList).QueryRows(&items)
  1019. return
  1020. }
  1021. // RoadshowEssencePublishAndCancel 修改发布状态
  1022. func RoadshowEssencePublishAndCancel(item *CygxResearchSummaryRep) (err error) {
  1023. o := orm.NewOrmUsingDB("hz_cygx")
  1024. sql := `UPDATE cygx_article SET publish_status=? , last_updated_time= ?, periods= ?,admin_id =? ,admin_name =? ,have_publish = 1 WHERE article_id=? `
  1025. _, err = o.Raw(sql, item.PublishStatus, time.Now(), item.Periods, item.AdminId, item.AdminName, item.ArticleId).Exec()
  1026. return
  1027. }
  1028. ////获取数量
  1029. //func GetCygxArticleCountNew(condition string, pars []interface{}) (count int, err error) {
  1030. // sqlCount := ` SELECT COUNT(1) AS count FROM cygx_article as art WHERE 1= 1 `
  1031. // if condition != "" {
  1032. // sqlCount += condition
  1033. // }
  1034. // o := orm.NewOrm()
  1035. // err = o.Raw(sqlCount, pars).QueryRow(&count)
  1036. // return
  1037. //}
  1038. func UpdateArticleInfoVideo(reportId int, tbName, videoUrl, videoName, videoSize string, playSeconds float64) (err error) {
  1039. o := orm.NewOrmUsingDB("hz_cygx")
  1040. sql := `UPDATE ` + tbName + ` SET video_url=?,video_name=?,video_play_seconds=?,video_size=? WHERE article_id=? `
  1041. _, err = o.Raw(sql, videoUrl, videoName, playSeconds, videoSize, reportId).Exec()
  1042. return
  1043. }
  1044. // 客户其他行为数据导出 start
  1045. type CygxArticleCollect struct {
  1046. ArticleId int `description:"文章id"`
  1047. UserId int `description:"用户ID"`
  1048. Title string `description:"标题"`
  1049. CreateTime string `description:"创建时间"`
  1050. PublishDate string `description:"发布时间"`
  1051. PermissionName string `description:"行业"`
  1052. IndustryName string `description:"产业名称"`
  1053. SubjectName string `description:"关联标的"`
  1054. MatchTypeName string `description:"报告类型"`
  1055. CategoryId string `description:"分类ID"`
  1056. }
  1057. type CygxArticleIndustry struct {
  1058. UserId int `description:"用户ID"`
  1059. IndustrialManagementId int `description:"产业id"`
  1060. CreateTime string `description:"创建时间"`
  1061. IndustryName string `description:"产业名称"`
  1062. }
  1063. type ArticleDepartment struct {
  1064. DepartmentId int `description:"主键ID"`
  1065. NickName string `description:"昵称"`
  1066. UserId int `description:"用户ID"`
  1067. IndustrialManagementId int `description:"产业id"`
  1068. CreateTime string `description:"创建时间"`
  1069. IndustryName string `description:"产业名称"`
  1070. }
  1071. type KeyWord struct {
  1072. UserId int `description:"用户ID"`
  1073. CreateTime string `description:"创建时间"`
  1074. KeyWord string `description:"关键词"`
  1075. }
  1076. type CompanyOtherHistoryList struct {
  1077. Mobile string `description:"手机号"`
  1078. Email string `description:"邮箱"`
  1079. RealName string `description:"姓名"`
  1080. ListArticle []*CygxArticleCollect
  1081. ListIndustrial []*CygxArticleIndustry
  1082. ListDepartment []*ArticleDepartment
  1083. ListKeyWord []*KeyWord
  1084. }
  1085. type CompanyOtherHistoryListResp struct {
  1086. List []*CompanyOtherHistoryList
  1087. }
  1088. // 文章列表
  1089. func GetArticleCollectList(condition string) (items []*CygxArticleCollect, err error) {
  1090. o := orm.NewOrmUsingDB("hz_cygx")
  1091. sql := `SELECT
  1092. c.*,
  1093. a.title,
  1094. a.publish_date,
  1095. a.category_id,
  1096. a.match_type_name,
  1097. (SELECT
  1098. GROUP_CONCAT( DISTINCT m.industry_name SEPARATOR ',' ) AS industry_name
  1099. FROM
  1100. cygx_industrial_management AS m
  1101. WHERE
  1102. 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,
  1103. (SELECT
  1104. GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ',' ) AS subject_name
  1105. FROM
  1106. cygx_industrial_subject AS s
  1107. WHERE
  1108. 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
  1109. FROM
  1110. cygx_article_collect AS c
  1111. INNER JOIN cygx_article AS a ON a.article_id = c.article_id
  1112. WHERE 1=1`
  1113. if condition != "" {
  1114. sql += condition
  1115. }
  1116. _, err = o.Raw(sql).QueryRows(&items)
  1117. return
  1118. }
  1119. // 产业列表
  1120. func GetCygxIndustryList(companyId int) (items []*CygxArticleIndustry, err error) {
  1121. o := orm.NewOrmUsingDB("hz_cygx")
  1122. sql := `SELECT
  1123. f.user_id,f.create_time,m.industrial_management_id,m.industry_name
  1124. FROM
  1125. cygx_industry_fllow AS f
  1126. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = f.industrial_management_id
  1127. WHERE
  1128. 1 = 1
  1129. AND f.company_id = ?`
  1130. _, err = o.Raw(sql, companyId).QueryRows(&items)
  1131. return
  1132. }
  1133. // 作者列表
  1134. func GetArticleDepartmentList(companyId int) (items []*ArticleDepartment, err error) {
  1135. o := orm.NewOrmUsingDB("hz_cygx")
  1136. sql := `SELECT
  1137. f.user_id,f.create_time,m.department_id,m.nick_name,
  1138. (SELECT
  1139. GROUP_CONCAT( DISTINCT m.industry_name SEPARATOR ',' ) AS industry_name
  1140. FROM
  1141. cygx_industrial_management AS m
  1142. WHERE
  1143. 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
  1144. FROM
  1145. cygx_article_department_follow AS f
  1146. INNER JOIN cygx_article_department AS m ON m.department_id = f.department_id
  1147. WHERE
  1148. 1 = 1
  1149. AND f.company_id = ?`
  1150. _, err = o.Raw(sql, companyId).QueryRows(&items)
  1151. return
  1152. }
  1153. // 关键词列表
  1154. func GetCygxSearchKeyWordList(userIdStr string) (items []*KeyWord, err error) {
  1155. o := orm.NewOrmUsingDB("hz_cygx")
  1156. sql := `SELECT * FROM cygx_search_key_word WHERE user_id IN (` + userIdStr + `)`
  1157. _, err = o.Raw(sql).QueryRows(&items)
  1158. return
  1159. }
  1160. // 关键词列表
  1161. func GetCygxUserSearchKeyWordList(userIdStr string) (items []*KeyWord, err error) {
  1162. o := orm.NewOrmUsingDB("hz_cygx")
  1163. sql := `SELECT * FROM cygx_user_search_key_word WHERE user_id IN (` + userIdStr + `) AND page_type IN ('ReortSearch','HomeSearch')`
  1164. _, err = o.Raw(sql).QueryRows(&items)
  1165. return
  1166. } //end
  1167. type CreateTimesResp struct {
  1168. CreateTimes string `description:"创建时间"`
  1169. }
  1170. type CompanyArticleCountResp struct {
  1171. CreateTimes string `description:"创建时间"`
  1172. ReadSum int `description:"总阅读数"`
  1173. YiyaoSum int `description:"医药阅读数"`
  1174. XiaofeiSum int `description:"医药阅读数"`
  1175. KejiSum int `description:"医药阅读数"`
  1176. ZhizaoSum int `description:"医药阅读数"`
  1177. CelueSum int `description:"医药阅读数"`
  1178. YanxuanSum int `description:"医药阅读数"`
  1179. }
  1180. type CompanyArticleCountListResp struct {
  1181. List []*CompanyArticleCountResp
  1182. }
  1183. func GetCompanyHistoryRecordPvGroupDate(mobiles, emails string) (item []*CreateTimesResp, err error) {
  1184. o := orm.NewOrmUsingDB("hz_cygx")
  1185. sql := ` SELECT date_format(create_time,'%Y-%m') as create_times FROM cygx_article_history_record_all AS h
  1186. INNER JOIN cygx_article art ON art.article_id = h.article_id
  1187. 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 `
  1188. _, err = o.Raw(sql).QueryRows(&item)
  1189. return
  1190. }
  1191. func GetCompanyHistoryRecordPv(mobiles, emails string) (item []*CompanyHistoryRecordNewPvRep, err error) {
  1192. o := orm.NewOrmUsingDB("hz_cygx")
  1193. sql := ` SELECT
  1194. a.title,
  1195. a.category_id,
  1196. date_format(h.create_time,'%Y-%m') as create_time,
  1197. m.chart_permission_name as permission_name
  1198. FROM
  1199. cygx_article_history_record_all AS h
  1200. INNER JOIN cygx_article AS a ON a.article_id = h.article_id
  1201. LEFT JOIN cygx_report_mapping AS m ON a.category_id = m.category_id
  1202. WHERE h.mobile IN (` + mobiles + `) AND h.is_del = 0 OR( h.email IN (` + emails + `) AND h.email <>'' AND h.is_del = 0 )
  1203. ORDER BY
  1204. h.create_time DESC `
  1205. _, err = o.Raw(sql).QueryRows(&item)
  1206. return
  1207. }
  1208. type CygxCelueArticleHistoryRecord struct {
  1209. Id int `orm:"column(id);pk"`
  1210. ArticleId int `description:"文章ID"`
  1211. CelueHistoryId int `description:"策略平台记录的ID"`
  1212. CreateTime string `description:"本地创建时间"`
  1213. CreateDateApi time.Time `description:"图表创建时间"`
  1214. Mobile string `description:"手机号"`
  1215. CompanyName string `description:"公司名称"`
  1216. RealName string `description:"用户姓名"`
  1217. }
  1218. func GetCygxCelueArticleHistoryRecordPvAll(articleIds string) (item []*ArticleHistoryRep, err error) {
  1219. o := orm.NewOrmUsingDB("hz_cygx")
  1220. 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 `
  1221. sql += ` ORDER BY create_time DESC `
  1222. _, err = o.Raw(sql).QueryRows(&item)
  1223. return
  1224. }
  1225. func GetCygxCelueArticleComapnyName(mobiles string) (item []*ArticleHistoryRep, err error) {
  1226. o := orm.NewOrm()
  1227. sql := `SELECT
  1228. c.company_name,a.real_name,u.mobile
  1229. FROM
  1230. wx_user AS u
  1231. INNER JOIN company as c ON c.company_id = u.company_id
  1232. INNER JOIN company_product as p ON p.company_id = c.company_id
  1233. INNER JOIN admin as a On a.admin_id = p.seller_id
  1234. WHERE p.product_id = 2
  1235. AND u.mobile IN ( ` + mobiles + `) GROUP BY u.mobile `
  1236. _, err = o.Raw(sql).QueryRows(&item)
  1237. return
  1238. }
  1239. type ArticleDetailResp struct {
  1240. ArticleId int `description:"文章ID"`
  1241. Title string `description:"标题"`
  1242. Abstract string `description:"摘要"`
  1243. Body string `description:"内容"`
  1244. PublishStatus int `description:"发布状态,0未发布 ,1已发布"`
  1245. PublishDate string `description:"发布时间"`
  1246. CreateDate time.Time `description:"创建时间"`
  1247. LastUpdatedTime time.Time `description:"更新时间"`
  1248. ArticleIdMd5 string `description:"ID,md5值"`
  1249. SellerAndMobile string `description:"作者(姓名与手机号)"`
  1250. SubjectName string `description:"标的名称"`
  1251. IndustryName string `description:"产业名称"`
  1252. DepartmentId int `description:"作者id"`
  1253. ChartPermissionIds string `description:"行业ID ,多个用 , 隔开"`
  1254. ArticleTypeId int `description:"文章类型ID"`
  1255. ArticleTypeName string `description:"文章类型名称"`
  1256. ListIndustrial []*IndustrialActivityGroupManagementRep
  1257. ListSubject []*SubjectActivityGroupManagementRep
  1258. ImgUrl string `description:"头像url"`
  1259. NickName string `description:"昵称"`
  1260. ReportLink string `description:"报告链接"`
  1261. }
  1262. // GetArticleIdsFromIndustryAndSubjectGroupByKeyword 产业/标的关键词获取文章IDs
  1263. func GetArticleIdsFromIndustryAndSubjectGroupByKeyword(keyword string) (ids []int, err error) {
  1264. o := orm.NewOrmUsingDB("hz_cygx")
  1265. sql := `SELECT DISTINCT
  1266. mg.article_id
  1267. FROM
  1268. cygx_industrial_article_group_management AS mg
  1269. INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id
  1270. WHERE
  1271. 1 = 1
  1272. AND m.industry_name LIKE ?
  1273. UNION
  1274. SELECT DISTINCT
  1275. sg.article_id
  1276. FROM
  1277. cygx_industrial_article_group_subject AS sg
  1278. INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = sg.industrial_subject_id
  1279. WHERE
  1280. 1 = 1
  1281. AND s.subject_name LIKE ?`
  1282. _, err = o.Raw(sql, keyword, keyword).QueryRows(&ids)
  1283. return
  1284. }
  1285. type SummaryArticleStock struct {
  1286. Id int `description:"新ID"`
  1287. ArticleId int `description:"文章id"`
  1288. Stock string `description:"个股标签"`
  1289. }
  1290. // 综述报告
  1291. func GetArticleStock() (items []*SummaryArticleStock, err error) {
  1292. o := orm.NewOrmUsingDB("hz_cygx")
  1293. sql := `SELECT
  1294. stock,article_id
  1295. FROM
  1296. cygx_article AS art
  1297. WHERE
  1298. 1 = 1
  1299. AND type_name = '综述报告' `
  1300. _, err = o.Raw(sql).QueryRows(&items)
  1301. return
  1302. }