report.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/models"
  5. "eta_gn/eta_api/services"
  6. "eta_gn/eta_api/services/alarm_msg"
  7. "eta_gn/eta_api/utils"
  8. "fmt"
  9. "github.com/beego/beego/v2/server/web"
  10. "github.com/h2non/filetype"
  11. "github.com/tealeg/xlsx"
  12. "html"
  13. "io"
  14. "os"
  15. "path"
  16. "path/filepath"
  17. "strconv"
  18. "strings"
  19. "time"
  20. )
  21. type ReportController struct {
  22. BaseAuthController
  23. }
  24. type ReportCommonController struct {
  25. BaseCommonController
  26. }
  27. type ReportUploadCommonController struct {
  28. web.Controller
  29. }
  30. // @router /delete [post]
  31. func (this *ReportController) Delete() {
  32. br := new(models.BaseResponse).Init()
  33. defer func() {
  34. this.Data["json"] = br
  35. this.ServeJSON()
  36. }()
  37. var req models.DeleteReq
  38. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  39. if err != nil {
  40. br.Msg = "参数解析异常!"
  41. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  42. return
  43. }
  44. if req.ReportIds <= 0 {
  45. br.Msg = "参数错误"
  46. br.ErrMsg = "参数错误,报告id不可为空"
  47. return
  48. }
  49. if err := services.DeleteReportAndChapter(req.ReportIds); err != nil {
  50. br.Msg = "删除失败"
  51. br.ErrMsg = "删除报告失败, Err: " + err.Error()
  52. return
  53. }
  54. br.Ret = 200
  55. br.Success = true
  56. br.Msg = "删除成功"
  57. }
  58. // @router /upload [post]
  59. func (this *ReportController) Upload() {
  60. br := new(models.BaseResponse).Init()
  61. defer func() {
  62. this.Data["json"] = br
  63. this.ServeJSON()
  64. }()
  65. f, h, err := this.GetFile("file")
  66. if err != nil {
  67. br.Msg = "获取资源信息失败"
  68. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  69. return
  70. }
  71. fileData, e := io.ReadAll(f)
  72. if e != nil {
  73. br.Msg = "上传失败"
  74. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  75. return
  76. }
  77. pass := filetype.IsImage(fileData)
  78. if !pass {
  79. br.Msg = "文件格式有误"
  80. br.ErrMsg = "文件格式有误"
  81. return
  82. }
  83. ext := path.Ext(h.Filename)
  84. dateDir := time.Now().Format("20060102")
  85. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  86. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  87. if err != nil {
  88. br.Msg = "存储目录创建失败"
  89. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  90. return
  91. }
  92. randStr := utils.GetRandStringNoSpecialChar(28)
  93. fileName := randStr + ext
  94. fpath := uploadDir + "/" + fileName
  95. defer f.Close() //关闭上传文件
  96. err = this.SaveToFile("file", fpath)
  97. if err != nil {
  98. br.Msg = "文件上传失败"
  99. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  100. return
  101. }
  102. resourceUrl := ``
  103. ossClient := services.NewOssClient()
  104. if ossClient == nil {
  105. br.Msg = "上传失败"
  106. br.ErrMsg = "初始化OSS服务失败"
  107. return
  108. }
  109. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  110. if err != nil {
  111. br.Msg = "文件上传失败"
  112. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  113. return
  114. }
  115. defer func() {
  116. os.Remove(fpath)
  117. }()
  118. item := new(models.Resource)
  119. item.ResourceUrl = resourceUrl
  120. item.ResourceType = 1
  121. item.CreateTime = time.Now()
  122. newId, err := models.AddResource(item)
  123. if err != nil {
  124. br.Msg = "资源上传失败"
  125. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  126. return
  127. }
  128. resp := new(models.ResourceResp)
  129. resp.Id = newId
  130. resp.ResourceUrl = resourceUrl
  131. br.Msg = "上传成功"
  132. br.Ret = 200
  133. br.Success = true
  134. br.Data = resp
  135. return
  136. }
  137. // @router /classifyIdDetail [get]
  138. func (this *ReportController) ClassifyIdDetail() {
  139. br := new(models.BaseResponse).Init()
  140. defer func() {
  141. this.Data["json"] = br
  142. this.ServeJSON()
  143. }()
  144. classifyIdFirst, _ := this.GetInt("classify_id_first")
  145. if classifyIdFirst <= 0 {
  146. classifyIdFirst, _ = this.GetInt("ClassifyIdFirst")
  147. }
  148. classifyIdSecond, _ := this.GetInt("classify_id_second")
  149. if classifyIdSecond <= 0 {
  150. classifyIdSecond, _ = this.GetInt("ClassifyIdSecond")
  151. }
  152. item, err := models.GetReportDetailByClassifyId(classifyIdFirst, classifyIdSecond)
  153. if err != nil && !utils.IsErrNoRow(err) {
  154. br.Msg = "获取失败!"
  155. br.ErrMsg = "获取失败,Err:" + err.Error()
  156. return
  157. }
  158. if item != nil {
  159. item.Content = html.UnescapeString(item.Content)
  160. item.ContentSub = html.UnescapeString(item.ContentSub)
  161. }
  162. br.Ret = 200
  163. br.Success = true
  164. br.Msg = "获取成功"
  165. br.Data = item
  166. }
  167. // @router /sendTemplateMsg [post]
  168. func (this *ReportController) SendTemplateMsg() {
  169. br := new(models.BaseResponse).Init()
  170. defer func() {
  171. this.Data["json"] = br
  172. this.ServeJSON()
  173. }()
  174. br.Ret = 200
  175. br.Success = true
  176. br.Msg = "操作成功"
  177. return
  178. }
  179. // @router /author [get]
  180. func (this *ReportController) Author() {
  181. br := new(models.BaseResponse).Init()
  182. defer func() {
  183. this.Data["json"] = br
  184. this.ServeJSON()
  185. }()
  186. keyword := this.GetString("Keyword")
  187. var condition string
  188. var pars []interface{}
  189. condition += ` AND author_type = 1 AND enable = 1`
  190. if keyword != `` {
  191. condition += ` AND report_author like ? `
  192. pars = append(pars, utils.GetLikeKeyword(keyword))
  193. }
  194. _, items, err := models.GetReportAuthorList(condition, pars, 0, 10000)
  195. if err != nil {
  196. br.Msg = "获取失败!"
  197. br.ErrMsg = "获取失败,Err:" + err.Error()
  198. return
  199. }
  200. resp := models.ReportAuthorResp{
  201. List: items,
  202. }
  203. br.Ret = 200
  204. br.Success = true
  205. br.Msg = "获取成功"
  206. br.Data = resp
  207. }
  208. // @router /uploadImg [post]
  209. func (this *ReportUploadCommonController) UploadImg() {
  210. var err error
  211. defer func() {
  212. if err != nil {
  213. fmt.Println("文件上传失败:", err.Error())
  214. go alarm_msg.SendAlarmMsg("URI:"+this.Ctx.Input.URI()+" 文件上传失败:"+err.Error(), 3)
  215. }
  216. }()
  217. f, h, err := this.GetFile("file")
  218. if err != nil {
  219. return
  220. }
  221. defer f.Close() //关闭上传文件
  222. fileData, e := io.ReadAll(f)
  223. if e != nil {
  224. err = fmt.Errorf("读取文件失败, Err: %s", e.Error())
  225. return
  226. }
  227. pass := filetype.IsImage(fileData)
  228. if !pass {
  229. kind, _ := filetype.Match(fileData)
  230. if kind.Extension != "pdf" {
  231. err = fmt.Errorf("文件格式有误")
  232. return
  233. }
  234. fmt.Printf("File type: %s. MIME: %s\n", kind.Extension, kind.MIME.Value)
  235. }
  236. ext := path.Ext(h.Filename)
  237. dateDir := time.Now().Format("20060102")
  238. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  239. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  240. if err != nil {
  241. return
  242. }
  243. randStr := utils.GetRandStringNoSpecialChar(28)
  244. fileName := randStr + ext
  245. fpath := uploadDir + "/" + fileName
  246. err = this.SaveToFile("file", fpath)
  247. if err != nil {
  248. return
  249. }
  250. defer func() {
  251. os.Remove(fpath)
  252. }()
  253. resourceUrl := ``
  254. ossClient := services.NewOssClient()
  255. if ossClient == nil {
  256. err = fmt.Errorf("初始化OSS服务失败")
  257. return
  258. }
  259. resourceUrl, err = ossClient.UploadFile(fileName, fpath, "")
  260. if err != nil {
  261. err = fmt.Errorf("文件上传失败, Err: %s", err.Error())
  262. return
  263. }
  264. item := new(models.Resource)
  265. item.ResourceUrl = resourceUrl
  266. item.ResourceType = 1
  267. item.CreateTime = time.Now()
  268. newId, err := models.AddResource(item)
  269. if err != nil {
  270. return
  271. }
  272. resp := new(models.ResourceResp)
  273. resp.Id = newId
  274. resp.ResourceUrl = resourceUrl
  275. this.Data["json"] = map[string]string{"link": resourceUrl}
  276. this.ServeJSON()
  277. }
  278. // @router /report_view_record/export [get]
  279. func (this *ReportController) Export() {
  280. br := new(models.BaseResponse).Init()
  281. defer func() {
  282. this.Data["json"] = br
  283. this.ServeJSON()
  284. }()
  285. sysUser := this.SysUser
  286. if sysUser == nil {
  287. br.Msg = "请登录"
  288. br.ErrMsg = "请登录,SysUser Is Empty"
  289. br.Ret = 408
  290. return
  291. }
  292. reportIds := this.GetString("ReportIds")
  293. if reportIds == "" {
  294. br.Msg = "请选择需要下载的报告"
  295. br.ErrMsg = "请选择需要下载的报告"
  296. return
  297. }
  298. dir, err := os.Executable()
  299. exPath := filepath.Dir(dir)
  300. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  301. xlsxFile := xlsx.NewFile()
  302. if err != nil {
  303. br.Msg = "生成文件失败"
  304. br.ErrMsg = "生成文件失败"
  305. return
  306. }
  307. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_RESEARCHR && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  308. br.Msg = "没有下载权限"
  309. br.ErrMsg = "没有下载权限"
  310. return
  311. }
  312. style := xlsx.NewStyle()
  313. alignment := xlsx.Alignment{
  314. Horizontal: "center",
  315. Vertical: "center",
  316. WrapText: true,
  317. }
  318. xlsx.SetDefaultFont(12, "宋体")
  319. style.Alignment = alignment
  320. style.ApplyAlignment = true
  321. titleStyle := xlsx.NewStyle()
  322. titleFont := xlsx.NewFont(20, "宋体")
  323. titleFont.Bold = true
  324. titleStyle.Font = *titleFont
  325. titleStyle.Alignment = alignment
  326. headerStyle := xlsx.NewStyle()
  327. headerFont := xlsx.NewFont(12, "宋体")
  328. headerFont.Bold = true
  329. headerStyle.Font = *headerFont
  330. headerStyle.Alignment = alignment
  331. headerStyle.ApplyAlignment = true
  332. defer func() {
  333. os.Remove(downLoadnFilePath)
  334. }()
  335. sheetNameMap := make(map[string]int)
  336. reportSlice := strings.Split(reportIds, ",")
  337. for _, reportIdStr := range reportSlice {
  338. reportId, convErr := strconv.Atoi(reportIdStr)
  339. if convErr != nil {
  340. br.Msg = "报告传参异常"
  341. br.ErrMsg = "报告传参异常"
  342. return
  343. }
  344. report, reportErr := models.GetReportById(reportId)
  345. if reportErr != nil {
  346. br.Msg = "查询报告异常"
  347. br.ErrMsg = "查询报告异常:" + reportErr.Error()
  348. return
  349. }
  350. _, viewList, err := models.GetViewListByReportId(reportId)
  351. if err != nil {
  352. br.Msg = "查询报告浏览记录异常"
  353. br.ErrMsg = "查询报告浏览记录异常:" + err.Error()
  354. return
  355. }
  356. createTime, _ := time.Parse(utils.FormatDateTime, report.CreateTime)
  357. timeStr := createTime.Format("0102")
  358. reportName := report.Title + "(" + timeStr + ")"
  359. sheetName := reportName
  360. if n, ok := sheetNameMap[sheetName]; ok == true {
  361. n++
  362. sheetName = sheetName + "_" + strconv.Itoa(n)
  363. sheetNameMap[sheetName] = n
  364. } else {
  365. sheetNameMap[sheetName] = 1
  366. }
  367. sheel, err := xlsxFile.AddSheet(sheetName)
  368. if err != nil {
  369. br.Msg = "新增Sheet失败"
  370. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  371. return
  372. }
  373. sheel.SetColWidth(0, 0, 28)
  374. sheel.SetColWidth(1, 1, 18)
  375. sheel.SetColWidth(2, 2, 18)
  376. sheel.SetColWidth(3, 3, 18)
  377. sheel.SetColWidth(4, 4, 40)
  378. titleRow := sheel.AddRow()
  379. titleRow.SetHeight(40)
  380. titleCell := titleRow.AddCell()
  381. titleCell.HMerge = 4 //向右合并列数,不包括自身列
  382. titleCell.SetValue(reportName)
  383. titleCell.SetStyle(titleStyle)
  384. headerRow := sheel.AddRow()
  385. headerRow.SetHeight(18)
  386. timeHeaderCell := headerRow.AddCell()
  387. timeHeaderCell.SetValue("浏览时间")
  388. timeHeaderCell.SetStyle(headerStyle)
  389. nameHeaderCell := headerRow.AddCell()
  390. nameHeaderCell.SetValue("用户名称")
  391. nameHeaderCell.SetStyle(headerStyle)
  392. mobileHeaderCell := headerRow.AddCell()
  393. mobileHeaderCell.SetValue("手机号")
  394. mobileHeaderCell.SetStyle(headerStyle)
  395. emailHeaderCell := headerRow.AddCell()
  396. emailHeaderCell.SetValue("邮箱")
  397. emailHeaderCell.SetStyle(headerStyle)
  398. companyHeaderCell := headerRow.AddCell()
  399. companyHeaderCell.SetValue("所属企业客户名称")
  400. companyHeaderCell.SetStyle(headerStyle)
  401. for _, v := range viewList {
  402. dataRow := sheel.AddRow()
  403. dataRow.SetHeight(18)
  404. timeCell := dataRow.AddCell()
  405. timeCell.SetString(v.CreateTime.Format(utils.FormatDateTime))
  406. timeCell.SetStyle(style)
  407. nameCell := dataRow.AddCell()
  408. nameCell.SetString(v.RealName)
  409. nameCell.SetStyle(style)
  410. mobileCell := dataRow.AddCell()
  411. mobileCell.SetString(v.Mobile)
  412. mobileCell.SetStyle(style)
  413. emailCell := dataRow.AddCell()
  414. emailCell.SetString(v.Email)
  415. emailCell.SetStyle(style)
  416. companyCell := dataRow.AddCell()
  417. companyCell.SetString(v.CompanyName)
  418. companyCell.SetStyle(style)
  419. }
  420. }
  421. err = xlsxFile.Save(downLoadnFilePath)
  422. if err != nil {
  423. br.Msg = "保存文件失败"
  424. br.ErrMsg = "保存文件失败"
  425. return
  426. }
  427. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  428. downloadFileName := "研报浏览记录" + randStr + ".xlsx"
  429. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  430. br.Ret = 200
  431. br.Success = true
  432. br.Msg = "导出成功"
  433. }
  434. // @router /ths/sendTemplateMsg [post]
  435. func (this *ReportController) ThsSendTemplateMsg() {
  436. br := new(models.BaseResponse).Init()
  437. defer func() {
  438. this.Data["json"] = br
  439. this.ServeJSON()
  440. }()
  441. var req models.ThsSendTemplateMsgReq
  442. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  443. if err != nil {
  444. br.Msg = "参数解析异常!"
  445. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  446. return
  447. }
  448. for _, v := range req.ReportId {
  449. if v <= 0 {
  450. br.Msg = "参数错误"
  451. br.ErrMsg = "参数错误"
  452. return
  453. }
  454. {
  455. redisKey := fmt.Sprint("report:send:ths:", v)
  456. ok := utils.Rc.SetNX(redisKey, 1, time.Second*300)
  457. if !ok {
  458. br.Msg = "报告已推送客群,请勿重复推送"
  459. return
  460. }
  461. defer func() {
  462. utils.Rc.Delete(redisKey)
  463. }()
  464. }
  465. report, err := models.GetReportById(v)
  466. if err != nil {
  467. if utils.IsErrNoRow(err) {
  468. br.Msg = "报告已经被删除,请刷新页面"
  469. br.ErrMsg = "报告已经被删除,请刷新页面,req:" + string(this.Ctx.Input.RequestBody)
  470. return
  471. }
  472. br.Msg = "获取报告信息失败"
  473. br.ErrMsg = "获取报告信息失败,req:" + string(this.Ctx.Input.RequestBody)
  474. return
  475. }
  476. if report.ThsMsgIsSend == 1 {
  477. br.Msg = "消息已推送,请勿重复操作"
  478. br.ErrMsg = "模板消息已推送,请勿重复操作1"
  479. return
  480. }
  481. err = models.ModifyReportThsMsgIsSend(report)
  482. if err != nil {
  483. br.Msg = "发送失败"
  484. br.ErrMsg = "发送失败,Err:" + err.Error()
  485. return
  486. }
  487. }
  488. br.Ret = 200
  489. br.Success = true
  490. br.Msg = "发送成功"
  491. }
  492. // @router /getDayWeekReportChapterTypeList [get]
  493. func (this *ReportController) GetDayWeekReportChapterTypeList() {
  494. br := new(models.BaseResponse).Init()
  495. defer func() {
  496. this.Data["json"] = br
  497. this.ServeJSON()
  498. }()
  499. sysUser := this.SysUser
  500. if sysUser == nil {
  501. br.Msg = "请登录"
  502. br.ErrMsg = "请登录,SysUser Is Empty"
  503. br.Ret = 408
  504. return
  505. }
  506. br.Ret = 200
  507. br.Success = true
  508. br.Msg = "操作成功"
  509. return
  510. }
  511. // @router /getDayWeekReportPauseTime [get]
  512. func (this *ReportController) GetDayWeekReportPauseTime() {
  513. br := new(models.BaseResponse).Init()
  514. defer func() {
  515. this.Data["json"] = br
  516. this.ServeJSON()
  517. }()
  518. sysUser := this.SysUser
  519. if sysUser == nil {
  520. br.Msg = "请登录"
  521. br.ErrMsg = "请登录,SysUser Is Empty"
  522. br.Ret = 408
  523. return
  524. }
  525. br.Ret = 200
  526. br.Success = true
  527. br.Msg = "操作成功"
  528. return
  529. }
  530. // @router /editDayWeekReport [post]
  531. func (this *ReportController) EditDayWeekReport() {
  532. br := new(models.BaseResponse).Init()
  533. defer func() {
  534. this.Data["json"] = br
  535. this.ServeJSON()
  536. }()
  537. sysUser := this.SysUser
  538. if sysUser == nil {
  539. br.Msg = "请登录"
  540. br.ErrMsg = "请登录,SysUser Is Empty"
  541. br.Ret = 408
  542. return
  543. }
  544. br.Ret = 200
  545. br.Success = true
  546. br.Msg = "操作成功"
  547. return
  548. }
  549. // @router /getLastDayWeekReportChapter [get]
  550. func (this *ReportController) GetLastDayWeekReportChapter() {
  551. br := new(models.BaseResponse).Init()
  552. defer func() {
  553. this.Data["json"] = br
  554. this.ServeJSON()
  555. }()
  556. sysUser := this.SysUser
  557. if sysUser == nil {
  558. br.Msg = "请登录"
  559. br.ErrMsg = "请登录,SysUser Is Empty"
  560. br.Ret = 408
  561. return
  562. }
  563. br.Ret = 200
  564. br.Success = true
  565. br.Msg = "操作成功"
  566. return
  567. }
  568. // @router /getChapterTrendTag [get]
  569. func (this *ReportController) GetChapterTrendTag() {
  570. br := new(models.BaseResponse).Init()
  571. defer func() {
  572. this.Data["json"] = br
  573. this.ServeJSON()
  574. }()
  575. sysUser := this.SysUser
  576. if sysUser == nil {
  577. br.Msg = "请登录"
  578. br.ErrMsg = "请登录,SysUser Is Empty"
  579. br.Ret = 408
  580. return
  581. }
  582. list, err := models.GetKeyWordListByFrom("trend")
  583. if err != nil {
  584. br.Msg = "获取章节趋势标签列表失败"
  585. br.ErrMsg = "获取章节趋势标签列表失败, Err: " + err.Error()
  586. return
  587. }
  588. br.Ret = 200
  589. br.Success = true
  590. br.Msg = "获取成功"
  591. br.Data = list
  592. }
  593. // @router /getDayReportTickerList [get]
  594. func (this *ReportController) GetDayReportTickerList() {
  595. br := new(models.BaseResponse).Init()
  596. defer func() {
  597. this.Data["json"] = br
  598. this.ServeJSON()
  599. }()
  600. sysUser := this.SysUser
  601. if sysUser == nil {
  602. br.Msg = "请登录"
  603. br.ErrMsg = "请登录,SysUser Is Empty"
  604. br.Ret = 408
  605. return
  606. }
  607. br.Ret = 200
  608. br.Success = true
  609. br.Msg = "操作成功"
  610. return
  611. }
  612. // @router /getDayWeekReportVideoList [get]
  613. func (this *ReportController) GetDayWeekReportVideoList() {
  614. br := new(models.BaseResponse).Init()
  615. defer func() {
  616. this.Data["json"] = br
  617. this.ServeJSON()
  618. }()
  619. sysUser := this.SysUser
  620. if sysUser == nil {
  621. br.Msg = "请登录"
  622. br.ErrMsg = "请登录,SysUser Is Empty"
  623. br.Ret = 408
  624. return
  625. }
  626. reportId, _ := this.GetInt("ReportId")
  627. if reportId <= 0 {
  628. br.Msg = "参数有误"
  629. return
  630. }
  631. list, err := models.GetReportChapterVideoList(reportId)
  632. if err != nil {
  633. br.Msg = "获取失败"
  634. br.ErrMsg = "获取报告音频列表失败, Err: " + err.Error()
  635. return
  636. }
  637. br.Ret = 200
  638. br.Success = true
  639. br.Msg = "获取成功"
  640. br.Data = list
  641. }
  642. // @router /isLastDayWeekReportChapter [get]
  643. func (this *ReportController) IsLastDayWeekReportChapter() {
  644. br := new(models.BaseResponse).Init()
  645. defer func() {
  646. this.Data["json"] = br
  647. this.ServeJSON()
  648. }()
  649. sysUser := this.SysUser
  650. if sysUser == nil {
  651. br.Msg = "请登录"
  652. br.ErrMsg = "请登录,SysUser Is Empty"
  653. br.Ret = 408
  654. return
  655. }
  656. br.Ret = 200
  657. br.Success = true
  658. br.Msg = "操作成功"
  659. return
  660. }
  661. // @router /publishDayWeekReport [post]
  662. func (this *ReportController) PublishDayWeekReport() {
  663. br := new(models.BaseResponse).Init()
  664. defer func() {
  665. this.Data["json"] = br
  666. this.ServeJSON()
  667. }()
  668. sysUser := this.SysUser
  669. if sysUser == nil {
  670. br.Msg = "请登录"
  671. br.ErrMsg = "请登录,SysUser Is Empty"
  672. br.Ret = 408
  673. return
  674. }
  675. br.Ret = 200
  676. br.Success = true
  677. br.Msg = "操作成功"
  678. return
  679. }
  680. // @router /getStopDayWeekReportChapterTypeList [get]
  681. func (this *ReportController) GetStopDayWeekReportChapterTypeList() {
  682. br := new(models.BaseResponse).Init()
  683. defer func() {
  684. this.Data["json"] = br
  685. this.ServeJSON()
  686. }()
  687. sysUser := this.SysUser
  688. if sysUser == nil {
  689. br.Msg = "请登录"
  690. br.ErrMsg = "请登录,SysUser Is Empty"
  691. br.Ret = 408
  692. return
  693. }
  694. br.Ret = 200
  695. br.Success = true
  696. br.Msg = "获取成功"
  697. return
  698. }
  699. // @router /mark [post]
  700. func (this *ReportController) MarkEditStatus() {
  701. br := new(models.BaseResponse).Init()
  702. defer func() {
  703. this.Data["json"] = br
  704. this.ServeJSON()
  705. }()
  706. sysUser := this.SysUser
  707. if sysUser == nil {
  708. br.Msg = "请登录"
  709. br.ErrMsg = "请登录,SysUser Is Empty"
  710. br.Ret = 408
  711. return
  712. }
  713. var req models.MarkEditReport
  714. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  715. if err != nil {
  716. br.Msg = "参数解析异常!"
  717. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  718. return
  719. }
  720. if req.ReportId <= 0 {
  721. br.Msg = "缺少报告Id"
  722. return
  723. }
  724. if req.Status < 0 {
  725. br.Msg = "标记状态异常"
  726. return
  727. }
  728. data, err := services.UpdateReportEditMark(req.ReportId, req.ReportChapterId, sysUser.AdminId, req.Status, sysUser.RealName, this.Lang)
  729. if err != nil {
  730. br.Msg = err.Error()
  731. return
  732. }
  733. msg := "标记成功"
  734. br.Ret = 200
  735. br.Success = true
  736. br.Msg = msg
  737. br.Data = data
  738. }
  739. // @router /sendMsg [post]
  740. func (this *ReportController) SendMsg() {
  741. br := new(models.BaseResponse).Init()
  742. defer func() {
  743. this.Data["json"] = br
  744. this.ServeJSON()
  745. }()
  746. var req models.SendTemplateMsgReq
  747. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  748. if err != nil {
  749. br.Msg = "参数解析异常!"
  750. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  751. return
  752. }
  753. if req.ReportId <= 0 {
  754. br.Msg = "参数错误"
  755. br.ErrMsg = "参数错误"
  756. return
  757. }
  758. {
  759. redisKey := fmt.Sprint("report:send:ths:", req.ReportId)
  760. ok := utils.Rc.SetNX(redisKey, 1, time.Second*300)
  761. if !ok {
  762. br.Msg = "报告已推送, 请勿重复推送"
  763. return
  764. }
  765. defer func() {
  766. _ = utils.Rc.Delete(redisKey)
  767. }()
  768. }
  769. reportInfo, e := models.GetReportByReportId(req.ReportId)
  770. if e != nil {
  771. br.Msg = "报告不存在或已被删除, 请刷新页面"
  772. br.ErrMsg = "获取报告失败, Err: " + e.Error()
  773. return
  774. }
  775. if reportInfo.MsgIsSend == 1 && reportInfo.ThsMsgIsSend == 1 {
  776. br.Msg = "消息已推送,请勿重复操作"
  777. br.ErrMsg = "消息已推送,请勿重复操作"
  778. return
  779. }
  780. videoNameDate := `(` + time.Now().Format("0102") + `)`
  781. if err = models.UpdateReportPublishTime(req.ReportId, videoNameDate); err != nil {
  782. br.Msg = "修改报告发布时间失败"
  783. br.ErrMsg = "修改发布时间失败,Err:" + err.Error()
  784. return
  785. }
  786. if err = models.UpdateReportChapterPublishTime(req.ReportId, videoNameDate); err != nil {
  787. br.Msg = "修改章节发布时间失败"
  788. br.ErrMsg = "修改发布时间失败,Err:" + err.Error()
  789. return
  790. }
  791. if reportInfo.MsgIsSend == 0 {
  792. go services.SendMiniProgramReportWxMsg(reportInfo.Id)
  793. }
  794. reportInfo.MsgIsSend = 1
  795. reportInfo.ThsMsgIsSend = 1
  796. reportInfo.MsgSendTime = time.Now()
  797. reportInfo.ModifyTime = time.Now()
  798. err = reportInfo.UpdateReport([]string{"MsgIsSend", "ThsMsgIsSend", "MsgSendTime", "ModifyTime"})
  799. if err != nil {
  800. br.Msg = "推送失败"
  801. br.ErrMsg = "更新报告消息状态失败, Err:" + err.Error()
  802. return
  803. }
  804. br.Ret = 200
  805. br.Success = true
  806. br.Msg = "推送成功"
  807. br.IsAddLog = true
  808. br.Data = models.SendTemplateMsgResp{
  809. ReportId: reportInfo.Id,
  810. MsgSendTime: reportInfo.MsgSendTime.Format(utils.FormatDateTime),
  811. }
  812. }
  813. // @router /CheckDayWeekReportChapterVideo [get]
  814. func (this *ReportController) CheckDayWeekReportChapterVideo() {
  815. br := new(models.BaseResponse).Init()
  816. defer func() {
  817. this.Data["json"] = br
  818. this.ServeJSON()
  819. }()
  820. sysUser := this.SysUser
  821. if sysUser == nil {
  822. br.Msg = "请登录"
  823. br.ErrMsg = "请登录,SysUser Is Empty"
  824. br.Ret = 408
  825. return
  826. }
  827. reqReportId := this.GetString("ReportId")
  828. reportId, _ := strconv.Atoi(reqReportId)
  829. if reportId <= 0 {
  830. br.Msg = "报告ID有误"
  831. return
  832. }
  833. chapterList, err := models.GetChapterListByReportId(reportId)
  834. if err != nil {
  835. br.Msg = "获取章节列表失败"
  836. br.ErrMsg = "获取章节列表失败, Err: " + err.Error()
  837. return
  838. }
  839. typeNameArr := make([]string, 0)
  840. for _, v := range chapterList {
  841. if v.VideoUrl == "" || (v.VideoUrl != "" && v.VideoKind == 2) {
  842. typeNameArr = append(typeNameArr, v.TypeName)
  843. }
  844. }
  845. br.Ret = 200
  846. br.Success = true
  847. br.Msg = "保存成功"
  848. br.Data = typeNameArr
  849. }