report_article.go 51 KB

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