report.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "hongze/hongze_admin/models"
  5. "hongze/hongze_admin/services"
  6. "hongze/hongze_admin/utils"
  7. "html"
  8. "os"
  9. "path"
  10. "strconv"
  11. "time"
  12. )
  13. //报告
  14. type ReportController struct {
  15. BaseAuthController
  16. }
  17. // @Title 获取报告列表接口
  18. // @Description 获取报告列表
  19. // @Param PageSize query int true "每页数据条数"
  20. // @Param CurrentIndex query int true "当前页页码,从1开始"
  21. // @Param StartDate query string true "开始时间"
  22. // @Param EndDate query string true "结束时间"
  23. // @Param Frequency query string true "频度"
  24. // @Param ClassifyNameFirst query string true "一级分类名称"
  25. // @Param ClassifyNameSecond query string true "二级分类名称"
  26. // @Param State query int true "状态"
  27. // @Param KeyWord query string true "搜索关键词"
  28. // @Param PublishSort query string true "desc:降序,asc 升序(预留)"
  29. // @Success 200 {object} models.ReportListResp
  30. // @router /list [get]
  31. func (this *ReportController) ListReport() {
  32. br := new(models.BaseResponse).Init()
  33. defer func() {
  34. this.Data["json"] = br
  35. this.ServeJSON()
  36. }()
  37. pageSize, _ := this.GetInt("PageSize")
  38. currentIndex, _ := this.GetInt("CurrentIndex")
  39. startDate := this.GetString("StartDate")
  40. endDate := this.GetString("EndDate")
  41. frequency := this.GetString("Frequency")
  42. classifyNameFirst := this.GetString("ClassifyNameFirst")
  43. classifyNameSecond := this.GetString("ClassifyNameSecond")
  44. state, _ := this.GetInt("State")
  45. keyWord := this.GetString("KeyWord")
  46. var startSize int
  47. if pageSize <= 0 {
  48. pageSize = utils.PageSize20
  49. }
  50. if currentIndex <= 0 {
  51. currentIndex = 1
  52. }
  53. startSize = utils.StartIndex(currentIndex, pageSize)
  54. var condition string
  55. var pars []interface{}
  56. if keyWord != "" {
  57. condition += ` AND (title LIKE '%` + keyWord + `%' OR author LIKE '%` + keyWord + `%' ) `
  58. }
  59. if startDate != "" {
  60. condition += ` AND create_time >= ? `
  61. pars = append(pars, startDate)
  62. }
  63. if endDate != "" {
  64. condition += ` AND create_time <= ? `
  65. pars = append(pars, endDate)
  66. }
  67. if frequency != "" {
  68. condition += ` AND frequency = ? `
  69. pars = append(pars, frequency)
  70. }
  71. if classifyNameFirst != "" {
  72. condition += ` AND classify_name_first = ? `
  73. pars = append(pars, classifyNameFirst)
  74. }
  75. if classifyNameSecond != "" {
  76. condition += ` AND classify_name_second = ? `
  77. pars = append(pars, classifyNameSecond)
  78. }
  79. if state > 0 {
  80. condition += ` AND state = ? `
  81. pars = append(pars, state)
  82. }
  83. total, err := models.GetReportListCount(condition, pars)
  84. if err != nil {
  85. br.Msg = "获取失败"
  86. br.ErrMsg = "获取失败,Err:" + err.Error()
  87. return
  88. }
  89. list, err := models.GetReportList(condition, pars, startSize, pageSize)
  90. if err != nil {
  91. br.Msg = "获取失败"
  92. br.ErrMsg = "获取失败,Err:" + err.Error()
  93. return
  94. }
  95. page := models.GetPaging(currentIndex, pageSize, total)
  96. resp := new(models.ReportListResp)
  97. resp.Paging = page
  98. resp.List = list
  99. br.Ret = 200
  100. br.Success = true
  101. br.Msg = "获取成功"
  102. br.Data = resp
  103. }
  104. // @Title 发布报告接口
  105. // @Description 发布报告
  106. // @Param request body models.PublishReq true "type json string"
  107. // @Success 200 Ret=200 发布成功
  108. // @router /publish [post]
  109. func (this *ReportController) PublishReport() {
  110. br := new(models.BaseResponse).Init()
  111. defer func() {
  112. this.Data["json"] = br
  113. this.ServeJSON()
  114. }()
  115. var req models.PublishReq
  116. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  117. if err != nil {
  118. br.Msg = "参数解析异常!"
  119. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  120. return
  121. }
  122. if req.ReportIds != "" {
  123. br.Msg = "参数错误"
  124. br.ErrMsg = "参数错误,报告id不可为空"
  125. return
  126. }
  127. err = models.PublishReport(req.ReportIds)
  128. if err != nil {
  129. br.Msg = "发布失败"
  130. br.ErrMsg = "发布失败,Err:" + err.Error()
  131. return
  132. }
  133. br.Ret = 200
  134. br.Success = true
  135. br.Msg = "发布成功"
  136. }
  137. // @Title 取消发布报告接口
  138. // @Description 取消发布报告
  139. // @Param request body models.PublishReq true "type json string"
  140. // @Success 200 Ret=200 发布成功
  141. // @router /publish/cancle [post]
  142. func (this *ReportController) PublishCancleReport() {
  143. br := new(models.BaseResponse).Init()
  144. defer func() {
  145. this.Data["json"] = br
  146. this.ServeJSON()
  147. }()
  148. var req models.PublishReq
  149. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  150. if err != nil {
  151. br.Msg = "参数解析异常!"
  152. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  153. return
  154. }
  155. if req.ReportIds != "" {
  156. br.Msg = "参数错误"
  157. br.ErrMsg = "参数错误,报告id不可为空"
  158. return
  159. }
  160. err = models.PublishCancleReport(req.ReportIds)
  161. if err != nil {
  162. br.Msg = "取消发布失败"
  163. br.ErrMsg = "取消发布失败,Err:" + err.Error()
  164. return
  165. }
  166. br.Ret = 200
  167. br.Success = true
  168. br.Msg = "取消发布成功"
  169. }
  170. // @Title 删除报告接口
  171. // @Description 删除报告
  172. // @Param request body models.DeleteReq true "type json string"
  173. // @Success 200 Ret=200 发布成功
  174. // @router /delete [post]
  175. func (this *ReportController) Delete() {
  176. br := new(models.BaseResponse).Init()
  177. defer func() {
  178. this.Data["json"] = br
  179. this.ServeJSON()
  180. }()
  181. var req models.DeleteReq
  182. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  183. if err != nil {
  184. br.Msg = "参数解析异常!"
  185. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  186. return
  187. }
  188. if req.ReportIds != "" {
  189. br.Msg = "参数错误"
  190. br.ErrMsg = "参数错误,报告id不可为空"
  191. return
  192. }
  193. err = models.DeleteReport(req.ReportIds)
  194. if err != nil {
  195. br.Msg = "删除失败"
  196. br.ErrMsg = "删除失败,Err:" + err.Error()
  197. return
  198. }
  199. br.Ret = 200
  200. br.Success = true
  201. br.Msg = "删除成功"
  202. }
  203. // @Title 新增报告接口
  204. // @Description 新增报告
  205. // @Param request body models.AddReq true "type json string"
  206. // @Success 200 {object} models.AddResp
  207. // @router /add [post]
  208. func (this *ReportController) Add() {
  209. br := new(models.BaseResponse).Init()
  210. defer func() {
  211. this.Data["json"] = br
  212. this.ServeJSON()
  213. }()
  214. var req models.AddReq
  215. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  216. if err != nil {
  217. br.Msg = "参数解析异常!"
  218. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  219. return
  220. }
  221. var contentSub string
  222. if req.Content != "" {
  223. contentSub, err = services.GetReportContentSub(req.Content)
  224. if err != nil {
  225. utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  226. }
  227. }
  228. maxStage, err := models.GetReportStage(req.ClassifyIdFirst, req.ClassifyIdSecond)
  229. if err != nil {
  230. br.Msg = "期数获取失败!"
  231. br.ErrMsg = "期数获取失败,Err:" + err.Error()
  232. return
  233. }
  234. item := new(models.Report)
  235. item.AddType = req.AddType
  236. item.ClassifyIdFirst = req.ClassifyIdFirst
  237. item.ClassifyNameFirst = req.ClassifyNameFirst
  238. item.ClassifyIdSecond = req.ClassifyIdSecond
  239. item.ClassifyNameSecond = req.ClassifyNameSecond
  240. item.Title = req.Title
  241. item.Abstract = req.Abstract
  242. item.Author = req.Author
  243. item.Frequency = req.Frequency
  244. item.State = req.State
  245. item.Content = html.EscapeString(req.Content)
  246. item.Stage = maxStage + 1
  247. item.ContentSub = html.EscapeString(contentSub)
  248. item.CreateTime = req.CreateTime
  249. newReportId, err := models.AddReport(item)
  250. if err != nil {
  251. br.Msg = "保存失败"
  252. br.ErrMsg = "保存失败,Err:" + err.Error()
  253. return
  254. }
  255. //处理权限
  256. {
  257. permissionItems, err := models.GetPermission(req.ClassifyNameSecond)
  258. if err != nil {
  259. utils.SendEmail(utils.APPNAME+"失败提醒", "获取权限失败,Err:"+err.Error(), utils.EmailSendToUsers)
  260. }
  261. for _, v := range permissionItems {
  262. err = models.AddChartPermissionChapterMapping(v.ChartPermissionId, newReportId)
  263. if err != nil {
  264. utils.SendEmail(utils.APPNAME+"失败提醒", "新增权限失败,Err:"+err.Error()+strconv.FormatInt(newReportId, 10), utils.EmailSendToUsers)
  265. }
  266. }
  267. }
  268. resp := new(models.AddResp)
  269. resp.ReportId = newReportId
  270. br.Ret = 200
  271. br.Success = true
  272. br.Msg = "保存成功"
  273. br.Data = resp
  274. }
  275. // @Title 编辑报告接口
  276. // @Description 编辑报告
  277. // @Param request body models.EditReq true "type json string"
  278. // @Success 200 {object} models.EditResp
  279. // @router /edit [post]
  280. func (this *ReportController) Edit() {
  281. br := new(models.BaseResponse).Init()
  282. defer func() {
  283. this.Data["json"] = br
  284. this.ServeJSON()
  285. }()
  286. var req models.EditReq
  287. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  288. if err != nil {
  289. br.Msg = "参数解析异常!"
  290. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  291. return
  292. }
  293. var contentSub string
  294. if req.Content != "" {
  295. contentSub, err = services.GetReportContentSub(req.Content)
  296. if err != nil {
  297. utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  298. }
  299. }
  300. item := new(models.Report)
  301. item.ClassifyIdFirst = req.ClassifyIdFirst
  302. item.ClassifyNameFirst = req.ClassifyNameFirst
  303. item.ClassifyIdSecond = req.ClassifyIdSecond
  304. item.ClassifyNameSecond = req.ClassifyNameSecond
  305. item.Title = req.Title
  306. item.Abstract = req.Abstract
  307. item.Author = req.Author
  308. item.Frequency = req.Frequency
  309. item.State = req.State
  310. item.Content = html.EscapeString(req.Content)
  311. item.ContentSub = html.EscapeString(contentSub)
  312. item.CreateTime = req.CreateTime
  313. err = models.EditReport(item, req.ReportId)
  314. if err != nil {
  315. br.Msg = "保存失败"
  316. br.ErrMsg = "保存失败,Err:" + err.Error()
  317. return
  318. }
  319. resp := new(models.EditResp)
  320. resp.ReportId = req.ReportId
  321. br.Ret = 200
  322. br.Success = true
  323. br.Msg = "保存成功"
  324. br.Data = resp
  325. }
  326. // @Title 获取报告详情接口
  327. // @Description 获取报告详情
  328. // @Param request body models.ReportDetailReq true "type json string"
  329. // @Success 200 {object} models.Report
  330. // @router /detail [get]
  331. func (this *ReportController) Detail() {
  332. br := new(models.BaseResponse).Init()
  333. defer func() {
  334. this.Data["json"] = br
  335. this.ServeJSON()
  336. }()
  337. var req models.ReportDetailReq
  338. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  339. if err != nil {
  340. br.Msg = "参数解析异常!"
  341. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  342. return
  343. }
  344. if req.ReportId <= 0 {
  345. br.Msg = "参数错误"
  346. return
  347. }
  348. item, err := models.GetReportById(req.ReportId)
  349. if err != nil {
  350. br.Msg = "获取失败"
  351. br.ErrMsg = "获取失败,Err:" + err.Error()
  352. return
  353. }
  354. item.Content = html.UnescapeString(item.Content)
  355. item.ContentSub = html.UnescapeString(item.ContentSub)
  356. br.Ret = 200
  357. br.Success = true
  358. br.Msg = "获取成功"
  359. br.Data = item
  360. }
  361. // @Title 图片上传
  362. // @Description 图片上传接口
  363. // @Param file query file true "文件"
  364. // @Success 200 新增成功
  365. // @router /upload [post]
  366. func (this *ReportController) Upload() {
  367. br := new(models.BaseResponse).Init()
  368. defer func() {
  369. this.Data["json"] = br
  370. this.ServeJSON()
  371. }()
  372. f, h, err := this.GetFile("file")
  373. if err != nil {
  374. br.Msg = "获取资源信息失败"
  375. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  376. return
  377. }
  378. ext := path.Ext(h.Filename)
  379. dateDir := time.Now().Format("20060102")
  380. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  381. err = os.MkdirAll(uploadDir, 777)
  382. if err != nil {
  383. br.Msg = "存储目录创建失败"
  384. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  385. return
  386. }
  387. randStr := utils.GetRandStringNoSpecialChar(28)
  388. fileName := randStr + ext
  389. fpath := uploadDir + "/" + fileName
  390. defer f.Close() //关闭上传文件
  391. err = this.SaveToFile("file", fpath)
  392. if err != nil {
  393. br.Msg = "文件上传失败"
  394. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  395. return
  396. }
  397. //上传到阿里云
  398. resourceUrl, err := services.UploadAliyun(fileName, fpath)
  399. if err != nil {
  400. br.Msg = "文件上传失败"
  401. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  402. return
  403. }
  404. defer func() {
  405. os.Remove(fpath)
  406. }()
  407. item := new(models.Resource)
  408. item.ResourceUrl = resourceUrl
  409. item.ResourceType = 1
  410. item.CreateTime = time.Now()
  411. newId, err := models.AddResource(item)
  412. if err != nil {
  413. br.Msg = "资源上传失败"
  414. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  415. return
  416. }
  417. resp := new(models.ResourceResp)
  418. resp.Id = newId
  419. resp.ResourceUrl = resourceUrl
  420. br.Msg = "上传成功"
  421. br.Ret = 200
  422. br.Success = true
  423. br.Data = resp
  424. return
  425. }
  426. // @Title 根据分类获取最近一次报告详情接口
  427. // @Description 根据分类获取最近一次报告详情
  428. // @Param request body models.ClassifyIdDetailReq true "type json string"
  429. // @Success 200 {object} models.Report
  430. // @router /classifyIdDetail [get]
  431. func (this *ReportController) ClassifyIdDetail() {
  432. br := new(models.BaseResponse).Init()
  433. defer func() {
  434. this.Data["json"] = br
  435. this.ServeJSON()
  436. }()
  437. var req models.ClassifyIdDetailReq
  438. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  439. if err != nil {
  440. br.Msg = "参数解析异常!"
  441. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  442. return
  443. }
  444. item, err := models.GetReportDetailByClassifyId(req.ClassifyIdFirst, req.ClassifyIdSecond)
  445. if err != nil {
  446. br.Msg = "获取失败!"
  447. br.ErrMsg = "获取失败,Err:" + err.Error()
  448. return
  449. }
  450. item.Content = html.UnescapeString(item.Content)
  451. item.ContentSub = html.UnescapeString(item.ContentSub)
  452. br.Ret = 200
  453. br.Success = true
  454. br.Msg = "获取成功"
  455. br.Data = item
  456. }
  457. // @Title 模板消息推送接口
  458. // @Description 模板消息推送
  459. // @Param request body models.SendTemplateMsgReq true "type json string"
  460. // @Success 200 Ret=200 推送成功
  461. // @router /sendTemplateMsg [post]
  462. func (this *ReportController) SendTemplateMsg() {
  463. br := new(models.BaseResponse).Init()
  464. defer func() {
  465. this.Data["json"] = br
  466. this.ServeJSON()
  467. }()
  468. var req models.SendTemplateMsgReq
  469. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  470. if err != nil {
  471. br.Msg = "参数解析异常!"
  472. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  473. return
  474. }
  475. if req.ReportId <= 0 {
  476. br.Msg = "参数错误"
  477. br.ErrMsg = "参数错误"
  478. return
  479. }
  480. go services.SendWxTemplateMsg(req.ReportId)
  481. err = models.ModifyReportMsgIsSend(req.ReportId)
  482. if err != nil {
  483. br.Msg = "发送失败"
  484. br.ErrMsg = "发送失败,Err:" + err.Error()
  485. return
  486. }
  487. br.Ret = 200
  488. br.Success = true
  489. br.Msg = "发送成功"
  490. }
  491. // @Title 获取报告作者接口
  492. // @Description 获取报告作者
  493. // @Success 200 {object} models.ReportAuthorResp
  494. // @router /author [get]
  495. func (this *ReportController) Author() {
  496. br := new(models.BaseResponse).Init()
  497. defer func() {
  498. this.Data["json"] = br
  499. this.ServeJSON()
  500. }()
  501. items, err := models.GetReportAuthor()
  502. if err != nil {
  503. br.Msg = "获取失败!"
  504. br.ErrMsg = "获取失败,Err:" + err.Error()
  505. return
  506. }
  507. resp := new(models.ReportAuthorResp)
  508. resp.List = items
  509. br.Ret = 200
  510. br.Success = true
  511. br.Msg = "获取成功"
  512. br.Data = resp
  513. }