report.go 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. package models
  2. import (
  3. "eta/eta_hub/global"
  4. "eta/eta_hub/utils"
  5. "github.com/beego/beego/v2/client/orm"
  6. "github.com/rdlucklib/rdluck_tools/paging"
  7. "html"
  8. "strings"
  9. "time"
  10. )
  11. // 报告状态
  12. const (
  13. ReportStateUnpublished = 1 // 未发布
  14. ReportStatePublished = 2 // 已发布
  15. ReportStateWaitSubmit = 3 // 待提交
  16. ReportStateWaitApprove = 4 // 审批中
  17. ReportStateRefused = 5 // 已驳回
  18. ReportStatePass = 6 // 已通过
  19. )
  20. // 报告操作
  21. const (
  22. ReportOperateAdd = 1 // 新增报告
  23. ReportOperateEdit = 2 // 编辑报告
  24. ReportOperatePublish = 3 // 发布报告
  25. ReportOperateCancelPublish = 4 // 取消发布报告
  26. ReportOperateSubmitApprove = 5 // 提交审批
  27. ReportOperateCancelApprove = 6 // 撤回审批
  28. )
  29. // 报告类型
  30. const (
  31. ReportTypeChinese = 1 // 中文研报
  32. ReportTypeEnglish = 2 // 英文研报
  33. ReportTypeSmart = 3 // 智能研报
  34. )
  35. type Report struct {
  36. Id int `orm:"column(id)" description:"报告Id"`
  37. AddType int `json:"-" description:"新增方式:1:新增报告,2:继承报告"`
  38. ClassifyIdFirst int `description:"一级分类id"`
  39. ClassifyNameFirst string `description:"一级分类名称"`
  40. ClassifyIdSecond int `description:"二级分类id"`
  41. ClassifyNameSecond string `description:"二级分类名称"`
  42. Title string `description:"标题"`
  43. Abstract string `description:"摘要"`
  44. Author string `description:"作者"`
  45. Frequency string `description:"频度"`
  46. State int `description:"状态:1-未提交 2-待审核 3-驳回 4-审核"`
  47. Stage int `description:"期数"`
  48. MsgIsSend int `json:"-" description:"消息是否已发送,0:否,1:是"`
  49. ThsMsgIsSend int `json:"-" description:"客户群消息是否已发送,0:否,1:是"`
  50. Content string `description:"内容"`
  51. VideoUrl string `description:"音频文件URL"`
  52. VideoName string `description:"音频文件名称"`
  53. VideoPlaySeconds string `description:"音频播放时长"`
  54. VideoSize string `description:"音频文件大小,单位M"`
  55. ContentSub string `json:"-" description:"内容前两个章节"`
  56. ReportCode string `description:"报告唯一编码"`
  57. ReportVersion int `json:"-" description:"1:旧版,2:新版"`
  58. HasChapter int `json:"-" description:"是否有章节 0-否 1-是"`
  59. ChapterType string `json:"-" description:"章节类型 day-晨报 week-周报"`
  60. OldReportId int `json:"-" description:"research_report表ID, 大于0则表示该报告为老后台同步过来的"`
  61. MsgSendTime time.Time `json:"-" description:"模版消息发送时间"`
  62. AdminId int `description:"创建者账号"`
  63. AdminRealName string `description:"创建者姓名"`
  64. ApproveTime time.Time `description:"审批时间"`
  65. PublishTime time.Time `description:"发布时间"`
  66. CreateTime time.Time `description:"创建时间"`
  67. ModifyTime time.Time `description:"修改时间"`
  68. // eta1.8.3(研报改版)相关内容
  69. ContentStruct string `description:"内容组件"`
  70. LastModifyAdminId int `description:"最后更新人ID"`
  71. LastModifyAdminName string `description:"最后更新人姓名"`
  72. ContentModifyTime time.Time `description:"内容更新时间"`
  73. Pv int `description:"pv"`
  74. Uv int `description:"uv"`
  75. HeadImg string `description:"报告头图地址"`
  76. EndImg string `description:"报告尾图地址"`
  77. HeadStyle string `description:"版头样式"`
  78. EndStyle string `description:"版尾样式"`
  79. CanvasColor string `description:"画布颜色"`
  80. NeedSplice int `description:"是否拼接版头版位的标记,主要是为了兼容历史报告。0-不需要 1-需要"`
  81. HeadResourceId int `description:"版头资源ID"`
  82. EndResourceId int `description:"版尾资源ID"`
  83. ClassifyIdThird int `description:"三级分类id"`
  84. ClassifyNameThird string `description:"三级分类名称"`
  85. CollaborateType int8 `description:"协作方式,1:个人,2:多人协作。默认:1"`
  86. ReportLayout int8 `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
  87. IsPublicPublish int8 `description:"是否公开发布,1:是,2:否"`
  88. ReportCreateTime time.Time `description:"报告时间创建时间"`
  89. DetailImgUrl string `description:"报告详情长图地址"`
  90. DetailPdfUrl string `description:"报告详情PDF地址"`
  91. }
  92. type ReportListResp struct {
  93. List []*ReportItem
  94. Paging *paging.PagingItem `description:"分页数据"`
  95. }
  96. func GetReportListCount(condition string, pars []interface{}, companyType string) (count int, err error) {
  97. //产品权限
  98. companyTypeSqlStr := ``
  99. if companyType == "ficc" {
  100. companyTypeSqlStr = " AND classify_id_first != 40 "
  101. } else if companyType == "权益" {
  102. companyTypeSqlStr = " AND classify_id_first = 40 "
  103. }
  104. //oRddp := orm.NewOrmUsingDB("rddp")
  105. sql := `SELECT COUNT(1) AS count FROM report WHERE 1=1 ` + companyTypeSqlStr
  106. if condition != "" {
  107. sql += condition
  108. }
  109. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars).Scan(&count).Error
  110. return
  111. }
  112. func GetReportList(condition string, pars []interface{}, startSize, pageSize int) (items []*Report, err error) {
  113. //o := orm.NewOrmUsingDB("rddp")
  114. sql := `SELECT * FROM report WHERE 1=1 `
  115. if condition != "" {
  116. sql += condition
  117. }
  118. sql += `ORDER BY FIELD(state,3,1,4,5,6,2), modify_time DESC LIMIT ?,?`
  119. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars, startSize, pageSize).Find(&items).Error
  120. return
  121. }
  122. // PublishReport 发布报告
  123. func PublishReport(reportIds []int) (err error) {
  124. if len(reportIds) == 0 {
  125. return
  126. }
  127. //o := orm.NewOrmUsingDB("rddp")
  128. sql := `UPDATE report SET state=2,publish_time=now(),modify_time=NOW() WHERE id IN (` + utils.GetOrmInReplace(len(reportIds)) + `)`
  129. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql).Error
  130. return
  131. }
  132. // PublishCancleReport 取消发布报告
  133. func PublishCancleReport(reportIds int, publishTimeNullFlag bool) (err error) {
  134. //o := orm.NewOrmUsingDB("rddp")
  135. var sql string
  136. if publishTimeNullFlag {
  137. sql = ` UPDATE report SET state=1, publish_time=null, pre_publish_time=null, pre_msg_send=0 WHERE id =?`
  138. } else {
  139. sql = ` UPDATE report SET state=1, pre_publish_time=null, pre_msg_send=0 WHERE id =?`
  140. }
  141. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, reportIds).Error
  142. return
  143. }
  144. // 删除报告
  145. func DeleteReport(reportIds int) (err error) {
  146. //o := orm.NewOrmUsingDB("rddp")
  147. sql := ` DELETE FROM report WHERE id =? `
  148. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, reportIds).Error
  149. return
  150. }
  151. type ReportDetail struct {
  152. Id int `orm:"column(id)" description:"报告Id"`
  153. AddType int `description:"新增方式:1:新增报告,2:继承报告"`
  154. ClassifyIdFirst int `description:"一级分类id"`
  155. ClassifyNameFirst string `description:"一级分类名称"`
  156. ClassifyIdSecond int `description:"二级分类id"`
  157. ClassifyNameSecond string `description:"二级分类名称"`
  158. Title string `description:"标题"`
  159. Abstract string `description:"摘要"`
  160. Author string `description:"作者"`
  161. Frequency string `description:"频度"`
  162. CreateTime string `description:"创建时间"`
  163. ModifyTime string `description:"修改时间"`
  164. State int `description:"状态:1-未提交 2-待审核 3-驳回 4-审核"`
  165. PublishTime string `description:"发布时间"`
  166. PrePublishTime string `description:"预发布时间"`
  167. Stage int `description:"期数"`
  168. MsgIsSend int `json:"-" description:"消息是否已发送,0:否,1:是"`
  169. PreMsgSend int `json:"-" description:"定时发布成功后是否立即推送模版消息:0否,1是"`
  170. Content string `description:"内容"`
  171. VideoUrl string `description:"音频文件URL"`
  172. VideoName string `description:"音频文件名称"`
  173. VideoPlaySeconds string `description:"音频播放时长"`
  174. ContentSub string `json:"-" description:"内容前两个章节"`
  175. ThsMsgIsSend int `json:"-" description:"客户群消息是否已发送,0:否,1:是"`
  176. HasChapter int `json:"-" description:"是否有章节 0-否 1-是"`
  177. ChapterType string `json:"-" description:"章节类型 day-晨报 week-周报"`
  178. }
  179. func GetReportById(reportId int) (item *Report, err error) {
  180. //o := orm.NewOrmUsingDB("rddp")
  181. sql := `SELECT * FROM report WHERE id=?`
  182. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, reportId).Scan(&item).Error
  183. return
  184. }
  185. func GetReportStage(classifyIdFirst, classifyIdSecond int) (count int, err error) {
  186. //o := orm.NewOrmUsingDB("rddp")
  187. sql := ``
  188. if classifyIdSecond > 0 {
  189. sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_second=? "
  190. global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdSecond).Scan(&count)
  191. } else {
  192. sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first=? "
  193. global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst).Scan(&count)
  194. }
  195. return
  196. }
  197. func GetReportStageEdit(classifyIdFirst, classifyIdSecond, reportId int) (count int, err error) {
  198. //o := orm.NewOrmUsingDB("rddp")
  199. sql := ``
  200. if classifyIdSecond > 0 {
  201. sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_second=? AND id<>? "
  202. global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdSecond, reportId).Scan(&count)
  203. } else {
  204. sql = "SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first=? AND id<>? "
  205. global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst, reportId).Scan(&count)
  206. }
  207. return
  208. }
  209. type PublishReq struct {
  210. ReportIds string `description:"报告id,多个用英文逗号隔开"`
  211. State int `description:"状态:1-未提交 2-待审核 3-驳回 4-审核"`
  212. }
  213. type PublishCancelReq struct {
  214. ReportIds int `description:"报告id"`
  215. }
  216. type DeleteReq struct {
  217. ReportIds int `description:"报告id"`
  218. }
  219. type AddReq struct {
  220. AddType int `description:"新增方式:1:新增报告,2:继承报告"`
  221. ClassifyIdFirst int `description:"一级分类id"`
  222. ClassifyNameFirst string `description:"一级分类名称"`
  223. ClassifyIdSecond int `description:"二级分类id"`
  224. ClassifyNameSecond string `description:"二级分类名称"`
  225. Title string `description:"标题"`
  226. Abstract string `description:"摘要"`
  227. Author string `description:"作者"`
  228. Frequency string `description:"频度"`
  229. State int `description:"状态:1:未发布,2:已发布"`
  230. Content string `description:"内容"`
  231. CreateTime string `description:"创建时间"`
  232. ReportVersion int `description:"1:旧版,2:新版"`
  233. }
  234. type PrePublishReq struct {
  235. ReportId int `description:"报告id"`
  236. PrePublishTime string `description:"预发布时间"`
  237. PreMsgSend int `description:"定时发布成功后是否立即推送模版消息:0否,1是"`
  238. }
  239. type AddResp struct {
  240. ReportId int64 `description:"报告id"`
  241. ReportCode string `description:"报告code"`
  242. }
  243. func AddReport(item *Report) (lastId int64, err error) {
  244. o := orm.NewOrmUsingDB("rddp")
  245. lastId, err = o.Insert(item)
  246. return
  247. }
  248. type EditReq struct {
  249. ReportId int64 `description:"报告id"`
  250. ClassifyIdFirst int `description:"一级分类id"`
  251. ClassifyNameFirst string `description:"一级分类名称"`
  252. ClassifyIdSecond int `description:"二级分类id"`
  253. ClassifyNameSecond string `description:"二级分类名称"`
  254. Title string `description:"标题"`
  255. Abstract string `description:"摘要"`
  256. Author string `description:"作者"`
  257. Frequency string `description:"频度"`
  258. State int `description:"状态:1:未发布,2:已发布"`
  259. Content string `description:"内容"`
  260. CreateTime string `description:"创建时间"`
  261. }
  262. type EditResp struct {
  263. ReportId int64 `description:"报告id"`
  264. ReportCode string `description:"报告code"`
  265. }
  266. func EditReport(item *Report, reportId int64) (err error) {
  267. //o := orm.NewOrmUsingDB("rddp")
  268. sql := `UPDATE report
  269. SET
  270. classify_id_first =?,
  271. classify_name_first = ?,
  272. classify_id_second = ?,
  273. classify_name_second = ?,
  274. title = ?,
  275. abstract = ?,
  276. author = ?,
  277. frequency = ?,
  278. state = ?,
  279. content = ?,
  280. content_sub = ?,
  281. stage =?,
  282. create_time = ?,
  283. modify_time = ?
  284. WHERE id = ? `
  285. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, item.ClassifyIdFirst, item.ClassifyNameFirst, item.ClassifyIdSecond, item.ClassifyNameSecond, item.Title,
  286. item.Abstract, item.Author, item.Frequency, item.State, item.Content, item.ContentSub, item.Stage, item.CreateTime, time.Now(), reportId).Error
  287. return
  288. }
  289. type ReportDetailReq struct {
  290. ReportId int `description:"报告id"`
  291. }
  292. type ClassifyIdDetailReq struct {
  293. ClassifyIdFirst int `description:"报告一级分类id"`
  294. ClassifyIdSecond int `description:"报告二级分类id"`
  295. }
  296. type SendTemplateMsgReq struct {
  297. ReportId int `description:"报告id"`
  298. }
  299. func ModifyReportVideo(reportId int, videoUrl, videoName, videoSize string, playSeconds float64) (err error) {
  300. //o := orm.NewOrmUsingDB("rddp")
  301. sql := `UPDATE report SET video_url=?,video_name=?,video_play_seconds=?,video_size=? WHERE id=? `
  302. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, videoUrl, videoName, playSeconds, videoSize, reportId).Error
  303. return
  304. }
  305. func EditReportContent(reportId int, content, contentSub string) (err error) {
  306. //o := orm.NewOrmUsingDB("rddp")
  307. sql := ` UPDATE report SET content=?,content_sub=?,modify_time=NOW() WHERE id=? `
  308. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, content, contentSub, reportId).Error
  309. return
  310. }
  311. func AddReportSaveLog(reportId, adminId int, content, contentSub, adminName string) (err error) {
  312. //o := orm.NewOrmUsingDB("rddp")
  313. sql := ` INSERT INTO report_save_log(report_id, content,content_sub,admin_id,admin_name) VALUES (?,?,?,?,?) `
  314. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, reportId, content, contentSub, adminId, adminName).Error
  315. return
  316. }
  317. type SaveReportContentResp struct {
  318. ReportId int `description:"报告id"`
  319. }
  320. func ModifyReportCode(reportId int64, reportCode string) (err error) {
  321. //o := orm.NewOrmUsingDB("rddp")
  322. sql := `UPDATE report SET report_code=? WHERE id=? `
  323. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, reportCode, reportId).Error
  324. return
  325. }
  326. func ModifyReportThsMsgIsSend(item *ReportDetail) (err error) {
  327. //o := orm.NewOrmUsingDB("rddp")
  328. if item.ThsMsgIsSend == 0 {
  329. sql := `UPDATE report SET ths_msg_is_send = 1 WHERE id = ? `
  330. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, item.Id).Error
  331. }
  332. return
  333. }
  334. // GetDayWeekReportStage 获取晨报周报期数
  335. func GetDayWeekReportStage(classifyIdFirst int, yearStart time.Time) (count int, err error) {
  336. //o := orm.NewOrmUsingDB("rddp")
  337. sql := " SELECT MAX(stage) AS max_stage FROM report WHERE classify_id_first = ? AND create_time > ? "
  338. global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, classifyIdFirst, yearStart).Scan(&count)
  339. return
  340. }
  341. // GetReportByReportId 主键获取报告
  342. func GetReportByReportId(reportId int) (item *Report, err error) {
  343. //o := orm.NewOrmUsingDB("rddp")
  344. sql := `SELECT * FROM report WHERE id = ?`
  345. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, reportId).Scan(&item).Error
  346. return
  347. }
  348. // 发布报告
  349. func PublishReportById(reportId, state int, publishTime time.Time) (err error) {
  350. //o := orm.NewOrmUsingDB("rddp")
  351. sql := `UPDATE report SET state = ?, publish_time = ?, pre_publish_time = null, pre_msg_send=0, modify_time = NOW() WHERE id = ? `
  352. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql, state, publishTime, reportId).Error
  353. return
  354. }
  355. func UpdateReportPublishTime(reportId int, videoNameDate string) (err error) {
  356. //o := orm.NewOrmUsingDB("rddp")
  357. sql1 := ` UPDATE report SET publish_time = NOW() WHERE id = ? `
  358. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql1, reportId).Error
  359. if err != nil {
  360. return
  361. }
  362. //修改音频标题
  363. sql2 := ` UPDATE report SET video_name=CONCAT(SUBSTRING_INDEX(video_name,"(",1),"` + videoNameDate + `") WHERE id = ? and (video_name !="" and video_name is not null)`
  364. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql2, reportId).Error
  365. return
  366. }
  367. func UpdateReportChapterPublishTime(reportId int, videoNameDate string) (err error) {
  368. //o := orm.NewOrmUsingDB("rddp")
  369. sql1 := ` UPDATE report_chapter SET publish_time = NOW() WHERE report_id = ? `
  370. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql1, reportId).Error
  371. if err != nil {
  372. return
  373. }
  374. //修改音频标题
  375. sql2 := ` UPDATE report_chapter SET video_name=CONCAT(SUBSTRING_INDEX(video_name,"(",1),"` + videoNameDate + `") WHERE report_id = ? and (video_name !="" and video_name is not null)`
  376. err = global.DbMap[utils.MYSQL_URL_RDDP].Exec(sql2, reportId).Error
  377. return
  378. }
  379. // GetReportByCondition 获取报告
  380. func GetReportByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, isPage bool, startSize, pageSize int) (items []*Report, err error) {
  381. //o := orm.NewOrmUsingDB("rddp")
  382. fields := `*`
  383. if len(fieldArr) > 0 {
  384. fields = strings.Join(fieldArr, ",")
  385. }
  386. sql := `SELECT ` + fields + ` FROM report WHERE 1=1 `
  387. sql += condition
  388. order := ` ORDER BY modify_time DESC`
  389. if orderRule != `` {
  390. order = orderRule
  391. }
  392. sql += order
  393. if isPage {
  394. sql += ` LIMIT ?,?`
  395. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars, startSize, pageSize).Find(&items).Error
  396. } else {
  397. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars).Find(&items).Error
  398. }
  399. return
  400. }
  401. type ElasticReportDetail struct {
  402. ReportId int `description:"报告ID"`
  403. ReportChapterId int `description:"报告章节ID"`
  404. Title string `description:"标题"`
  405. Abstract string `description:"摘要"`
  406. BodyContent string `description:"内容"`
  407. PublishTime string `description:"发布时间"`
  408. PublishState int `description:"状态:1-未提交 2-待审核 3-驳回 4-审核"`
  409. Author string `description:"作者"`
  410. ClassifyIdFirst int `description:"一级分类ID"`
  411. ClassifyNameFirst string `description:"一级分类名称"`
  412. ClassifyIdSecond int `description:"二级分类ID"`
  413. ClassifyNameSecond string `description:"二级分类名称"`
  414. ClassifyId int `description:"最小单元的分类ID"`
  415. ClassifyName string `description:"最小单元的分类名称"`
  416. Categories string `description:"关联的品种名称(包括品种别名)"`
  417. StageStr string `description:"报告期数"`
  418. }
  419. type ReportItem struct {
  420. Id int `description:"报告Id"`
  421. ReportCode string `description:"报告唯一编码"`
  422. ClassifyIdFirst int `description:"一级分类id"`
  423. ClassifyNameFirst string `description:"一级分类名称"`
  424. ClassifyIdSecond int `description:"二级分类id"`
  425. ClassifyNameSecond string `description:"二级分类名称"`
  426. Title string `description:"标题"`
  427. Abstract string `description:"摘要"`
  428. Author string `description:"作者"`
  429. Frequency string `description:"频度"`
  430. State int `description:"状态:1:未发布;2:已发布;3-待提交;4-待审批;5-已驳回;6-已通过"`
  431. Stage int `description:"期数"`
  432. Content string `description:"内容"`
  433. VideoUrl string `description:"音频文件URL"`
  434. VideoName string `description:"音频文件名称"`
  435. VideoPlaySeconds string `description:"音频播放时长"`
  436. VideoSize string `description:"音频文件大小,单位M"`
  437. AdminId int `description:"创建者账号"`
  438. AdminRealName string `description:"创建者姓名"`
  439. PublishTime string `description:"发布时间"`
  440. ApproveTime string `description:"审批时间"`
  441. CreateTime string `description:"创建时间"`
  442. ModifyTime string `description:"修改时间"`
  443. // eta1.8.3(研报改版)相关内容
  444. //ContentStruct string `description:"内容组件"`
  445. //LastModifyAdminId int `description:"最后更新人ID"`
  446. //LastModifyAdminName string `description:"最后更新人姓名"`
  447. ContentModifyTime string `description:"内容更新时间"`
  448. //Pv int `description:"pv"`
  449. //Uv int `description:"uv"`
  450. HeadImg string `description:"报告头图地址"`
  451. EndImg string `description:"报告尾图地址"`
  452. HeadStyle string `description:"版头样式"`
  453. EndStyle string `description:"版尾样式"`
  454. CanvasColor string `description:"画布颜色"`
  455. NeedSplice int `description:"是否拼接版头版位的标记,主要是为了兼容历史报告。0-不需要 1-需要"`
  456. //HeadResourceId int `description:"版头资源ID"`
  457. //EndResourceId int `description:"版尾资源ID"`
  458. ClassifyIdThird int `description:"三级分类id"`
  459. ClassifyNameThird string `description:"三级分类名称"`
  460. //CollaborateType int8 `description:"协作方式,1:个人,2:多人协作。默认:1"`
  461. ReportLayout int8 `description:"报告布局,1:常规布局,2:智能布局。默认:1"`
  462. IsPublicPublish int8 `description:"是否公开发布,1:是,2:否"`
  463. ReportCreateTime string `description:"报告时间创建时间"`
  464. ChapterList []*ReportChapterItem `description:"章节列表"`
  465. HasChapter int `description:"是否有章节 0-否 1-是"`
  466. DetailImgUrl string `description:"报告详情长图地址"`
  467. DetailPdfUrl string `description:"报告详情PDF地址"`
  468. }
  469. func FormatReport2Item(origin *Report, chapterList []*ReportChapterItem) (item *ReportItem) {
  470. if origin == nil {
  471. return
  472. }
  473. item = new(ReportItem)
  474. item.Id = origin.Id
  475. item.ReportCode = origin.ReportCode
  476. item.ClassifyIdFirst = origin.ClassifyIdFirst
  477. item.ClassifyNameFirst = origin.ClassifyNameFirst
  478. item.ClassifyIdSecond = origin.ClassifyIdSecond
  479. item.ClassifyNameSecond = origin.ClassifyNameSecond
  480. item.Title = origin.Title
  481. item.Abstract = origin.Abstract
  482. item.Author = origin.Author
  483. item.Frequency = origin.Frequency
  484. item.State = origin.State
  485. item.Stage = origin.Stage
  486. item.Content = html.UnescapeString(origin.Content)
  487. item.VideoUrl = origin.VideoUrl
  488. item.VideoName = origin.VideoName
  489. item.VideoPlaySeconds = origin.VideoPlaySeconds
  490. item.VideoSize = origin.VideoSize
  491. item.AdminId = origin.AdminId
  492. item.AdminRealName = origin.AdminRealName
  493. item.PublishTime = utils.TimeTransferString(utils.FormatDateTime, origin.PublishTime)
  494. item.ApproveTime = utils.TimeTransferString(utils.FormatDateTime, origin.ApproveTime)
  495. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
  496. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
  497. // eta1.8.3(研报改版)相关内容
  498. item.HeadImg = origin.HeadImg
  499. item.EndImg = origin.EndImg
  500. item.HeadStyle = origin.HeadStyle
  501. item.EndStyle = origin.EndStyle
  502. item.CanvasColor = origin.CanvasColor
  503. item.NeedSplice = origin.NeedSplice
  504. item.ClassifyIdThird = origin.ClassifyIdThird
  505. item.ClassifyNameThird = origin.ClassifyNameThird
  506. item.ReportLayout = origin.ReportLayout
  507. item.IsPublicPublish = origin.IsPublicPublish
  508. item.ContentModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ContentModifyTime)
  509. item.ReportCreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.ReportCreateTime)
  510. item.ChapterList = chapterList
  511. item.HasChapter = origin.HasChapter
  512. item.DetailImgUrl = origin.DetailImgUrl
  513. item.DetailPdfUrl = origin.DetailPdfUrl
  514. return
  515. }
  516. // ReportApproveReq 报告审批请求体
  517. type ReportApproveReq struct {
  518. ReportId int `description:"报告ID"`
  519. Pass bool `description:"是否通过审批"`
  520. }
  521. // UpdateReport 更新报告
  522. func (m *Report) UpdateReport(cols []string) (err error) {
  523. //o := orm.NewOrmUsingDB("rddp")
  524. err = global.DbMap[utils.MYSQL_URL_RDDP].Select(cols).Updates(m).Error
  525. return
  526. }
  527. // 获取分类列表
  528. func GetClassifyList(startSize, pageSize int, keyWord, companyType string) (items []*ClassifyList, err error) {
  529. sql := ``
  530. companyTypeSqlStr := ``
  531. if companyType == "ficc" {
  532. companyTypeSqlStr = " AND id != 40 AND parent_id != 40 "
  533. } else if companyType == "权益" {
  534. companyTypeSqlStr = " AND (id = 40 or parent_id = 40) "
  535. }
  536. pars := make([]interface{}, 0)
  537. if keyWord != "" {
  538. sql = `SELECT * FROM (
  539. SELECT * FROM classify
  540. WHERE parent_id=0 ` + companyTypeSqlStr + ` AND classify_name LIKE ?
  541. UNION
  542. SELECT * FROM classify
  543. WHERE id IN( SELECT parent_id FROM classify
  544. WHERE parent_id>0 ` + companyTypeSqlStr + ` AND classify_name LIKE ? )
  545. )AS t
  546. ORDER BY sort ASC,create_time ASC
  547. LIMIT ?,? `
  548. pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
  549. } else {
  550. sql = `SELECT * FROM classify WHERE parent_id=0 ` + companyTypeSqlStr
  551. sql += ` ORDER BY sort ASC, create_time ASC LIMIT ?,? `
  552. }
  553. pars = append(pars, startSize, pageSize)
  554. //o := orm.NewOrmUsingDB("rddp")
  555. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Find(&items).Error
  556. return
  557. }
  558. func GetClassifyListCount(keyWord, companyType string) (count int, err error) {
  559. sqlCount := ``
  560. companyTypeSqlStr := ``
  561. if companyType == "ficc" {
  562. companyTypeSqlStr = " AND id != 40 AND parent_id != 40 "
  563. } else if companyType == "权益" {
  564. companyTypeSqlStr = " AND (id = 40 or parent_id = 40) "
  565. }
  566. pars := make([]interface{}, 0)
  567. if keyWord != "" {
  568. sqlCount = `SELECT COUNT(1) AS count FROM (
  569. SELECT * FROM classify
  570. WHERE parent_id=0 ` + companyTypeSqlStr + ` AND classify_name LIKE ?
  571. UNION
  572. SELECT * FROM classify
  573. WHERE id IN(SELECT parent_id FROM classify
  574. WHERE parent_id>0 ` + companyTypeSqlStr + ` AND classify_name LIKE ? )
  575. )AS t `
  576. pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
  577. } else {
  578. sqlCount = `SELECT COUNT(1) AS count FROM classify WHERE parent_id=0 ` + companyTypeSqlStr
  579. }
  580. //o := orm.NewOrmUsingDB("rddp")
  581. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sqlCount, pars...).Scan(&count).Error
  582. return
  583. }
  584. // GetClassifyListByKeywordV2
  585. // @Description: 获取分类列表
  586. // @author: Roc
  587. // @datetime 2024-06-19 09:49:33
  588. // @param keyWord string
  589. // @param enabled int
  590. // @return items []*ClassifyList
  591. // @return err error
  592. func GetClassifyListByKeywordV2(keyWord string, enabled int) (items []*ClassifyListV2, err error) {
  593. sql := ``
  594. pars := make([]interface{}, 0)
  595. sql = `SELECT * FROM classify WHERE 1=1 `
  596. if enabled == 1 {
  597. sql += ` AND enabled = 1 `
  598. }
  599. if keyWord != `` {
  600. sql += ` AND classify_name LIKE ? `
  601. pars = utils.GetLikeKeywordPars(pars, keyWord, 1)
  602. }
  603. sql += ` ORDER BY sort ASC, create_time ASC`
  604. //o := orm.NewOrmUsingDB("rddp")
  605. err = global.DbMap[utils.MYSQL_URL_RDDP].Raw(sql, pars...).Find(&items).Error
  606. return
  607. }