ppt.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. package controllers
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "hongze/hongze_admin/models"
  6. "hongze/hongze_admin/services"
  7. "hongze/hongze_admin/utils"
  8. "image"
  9. "os"
  10. "rdluck_tools/http"
  11. "time"
  12. )
  13. //报告
  14. type PptController struct {
  15. BaseAuthController
  16. }
  17. // @Title 获取ppt列表
  18. // @Description 获取ppt列表接口
  19. // @Param PageSize query int true "每页数据条数"
  20. // @Param CurrentIndex query int true "当前页页码,从1开始"
  21. // @Param KeyWord query string true "搜索关键词"
  22. // @Success 200 {object} models.ReportListResp
  23. // @router /list [get]
  24. func (this *PptController) ListPpt() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. this.Data["json"] = br
  28. this.ServeJSON()
  29. }()
  30. pageSize, _ := this.GetInt("PageSize")
  31. currentIndex, _ := this.GetInt("CurrentIndex")
  32. keyWord := this.GetString("KeyWord")
  33. var startSize int
  34. if pageSize <= 0 {
  35. pageSize = utils.PageSize20
  36. }
  37. if currentIndex <= 0 {
  38. currentIndex = 1
  39. }
  40. startSize = utils.StartIndex(currentIndex, pageSize)
  41. var condition string
  42. var pars []interface{}
  43. if keyWord != "" {
  44. condition += ` AND title LIKE '%` + keyWord + `%' `
  45. }
  46. total, err := models.GetPptListCount(condition, pars)
  47. if err != nil {
  48. br.Msg = "获取失败"
  49. br.ErrMsg = "获取失败,Err:" + err.Error()
  50. return
  51. }
  52. list, err := models.GetPptList(condition, pars, startSize, pageSize)
  53. if err != nil {
  54. br.Msg = "获取失败"
  55. br.ErrMsg = "获取失败,Err:" + err.Error()
  56. return
  57. }
  58. page := models.GetPaging(currentIndex, pageSize, total)
  59. resp := new(models.PptListResp)
  60. resp.Paging = page
  61. resp.List = list
  62. br.Ret = 200
  63. br.Success = true
  64. br.Msg = "获取成功"
  65. br.Data = resp
  66. }
  67. // @Title 新增ppt
  68. // @Description 新增ppt接口
  69. // @Param request body models.AddPptReq true "type json string"
  70. // @Success 200 Ret=200 新增成功
  71. // @router /add [post]
  72. func (this *PptController) AddPpt() {
  73. br := new(models.BaseResponse).Init()
  74. defer func() {
  75. this.Data["json"] = br
  76. this.ServeJSON()
  77. }()
  78. var req models.AddPptReq
  79. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  80. if err != nil {
  81. br.Msg = "参数解析异常!"
  82. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  83. return
  84. }
  85. if req.FirstPage.Title == "" {
  86. br.Msg = "标题不能为空"
  87. return
  88. }
  89. ppt := new(models.Ppt)
  90. ppt.Title = req.FirstPage.Title
  91. ppt.PptDate = req.FirstPage.PptDate
  92. ppt.ReportType = req.FirstPage.ReportType
  93. newId, err := models.AddPpt(ppt)
  94. if err != nil {
  95. br.Msg = "新增失败"
  96. br.ErrMsg = "新增失败,Err:" + err.Error()
  97. return
  98. }
  99. for _, v := range req.ContentPage {
  100. page := new(models.PptPages)
  101. page.PptId = newId
  102. page.Title = v.Title
  103. page.ResourceId = v.ResourceId
  104. _, err = models.AddPptPages(page)
  105. if err != nil {
  106. br.Msg = "新增失败"
  107. br.ErrMsg = "新增章节失败,Err:" + err.Error()
  108. return
  109. }
  110. }
  111. br.Ret = 200
  112. br.Success = true
  113. br.Msg = "新增成功"
  114. }
  115. // @Title 编辑ppt
  116. // @Description 编辑ppt接口
  117. // @Param request body models.EditPptReq true "type json string"
  118. // @Success 200 Ret=200 编辑成功
  119. // @router /edit [post]
  120. func (this *PptController) EditPpt() {
  121. br := new(models.BaseResponse).Init()
  122. defer func() {
  123. this.Data["json"] = br
  124. this.ServeJSON()
  125. }()
  126. var req models.EditPptReq
  127. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  128. if err != nil {
  129. br.Msg = "参数解析异常!"
  130. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  131. return
  132. }
  133. if req.FirstPage.Title == "" {
  134. br.Msg = "标题不能为空"
  135. return
  136. }
  137. ppt := new(models.Ppt)
  138. ppt.Title = req.FirstPage.Title
  139. ppt.PptDate = req.FirstPage.PptDate
  140. ppt.ReportType = req.FirstPage.ReportType
  141. err = models.EditPpt(ppt)
  142. if err != nil {
  143. br.Msg = "编辑失败"
  144. br.ErrMsg = "编辑失败,Err:" + err.Error()
  145. return
  146. }
  147. page := new(models.PptPages)
  148. page.PptPagesId = req.FirstPage.PptPagesId
  149. page.Title = req.FirstPage.Title
  150. page.ImgUrl = req.FirstPage.ImgUrl
  151. err = models.EditPptPages(page)
  152. if err != nil {
  153. br.Msg = "编辑失败"
  154. br.ErrMsg = "编辑章节失败,Err:" + err.Error()
  155. return
  156. }
  157. for _, v := range req.ContentPage {
  158. page := new(models.PptPages)
  159. page.PptId = req.PptId
  160. page.Title = v.Title
  161. page.ResourceId = v.ResourceId
  162. page.CreateTime = time.Now()
  163. page.ModifyTime = time.Now()
  164. if v.PptPagesId <= 0 {
  165. _, err = models.AddPptPages(page)
  166. if err != nil {
  167. br.Msg = "编辑失败"
  168. br.ErrMsg = "新增章节失败,Err:" + err.Error()
  169. return
  170. }
  171. } else {
  172. err = models.EditPptPages(page)
  173. if err != nil {
  174. br.Msg = "编辑失败"
  175. br.ErrMsg = "新增章节失败,Err:" + err.Error()
  176. return
  177. }
  178. }
  179. }
  180. br.Ret = 200
  181. br.Success = true
  182. br.Msg = "编辑成功"
  183. }
  184. // @Title 删除ppt
  185. // @Description 删除ppt接口
  186. // @Param request body models.DeletePptReq true "type json string"
  187. // @Success 200 Ret=200 编辑成功
  188. // @router /delete [post]
  189. func (this *PptController) DeletePpt() {
  190. br := new(models.BaseResponse).Init()
  191. defer func() {
  192. this.Data["json"] = br
  193. this.ServeJSON()
  194. }()
  195. var req models.DeletePptReq
  196. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  197. if err != nil {
  198. br.Msg = "参数解析异常!"
  199. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  200. return
  201. }
  202. if req.PptId <= 0 {
  203. br.Msg = "参数错误"
  204. return
  205. }
  206. err = models.DeletePpt(req.PptId)
  207. if err != nil {
  208. br.Msg = "删除失败"
  209. br.ErrMsg = "删除失败,Err:" + err.Error()
  210. return
  211. }
  212. br.Ret = 200
  213. br.Success = true
  214. br.Msg = "删除成功"
  215. }
  216. // @Title 新增ppt章节
  217. // @Description 新增ppt章节接口
  218. // @Param request body models.ContentPageItems true "type json string"
  219. // @Success 200 Ret=200 编辑成功
  220. // @router /addPptPages [post]
  221. func (this *PptController) AddPptPages() {
  222. br := new(models.BaseResponse).Init()
  223. defer func() {
  224. this.Data["json"] = br
  225. this.ServeJSON()
  226. }()
  227. var req models.ContentPageItems
  228. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  229. if err != nil {
  230. br.Msg = "参数解析异常!"
  231. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  232. return
  233. }
  234. page := new(models.PptPages)
  235. page.PptId = req.PptId
  236. page.Title = req.Title
  237. page.CreateTime = time.Now()
  238. page.ModifyTime = time.Now()
  239. page.ResourceId = req.ResourceId
  240. _, err = models.AddPptPages(page)
  241. if err != nil {
  242. br.Msg = "新增失败"
  243. br.ErrMsg = "新增失败,Err:" + err.Error()
  244. return
  245. }
  246. br.Ret = 200
  247. br.Success = true
  248. br.Msg = "新增成功"
  249. }
  250. // @Title 获取ppt详情
  251. // @Description 获取ppt详情接口
  252. // @Param PptId query int true "ppt_id"
  253. // @Success 200 {object} models.ReportListResp
  254. // @router /detail [get]
  255. func (this *PptController) DetailPpt() {
  256. br := new(models.BaseResponse).Init()
  257. defer func() {
  258. this.Data["json"] = br
  259. this.ServeJSON()
  260. }()
  261. pptId, _ := this.GetInt("PptId")
  262. ppt, err := models.GetPptById(pptId)
  263. if err != nil {
  264. br.Msg = "信息获取失败"
  265. br.ErrMsg = "信息获取失败,Err:" + err.Error()
  266. return
  267. }
  268. pptPages, err := models.GetPptPagesById(pptId)
  269. if err != nil {
  270. br.Msg = "信息获取失败"
  271. br.ErrMsg = "信息获取失败,Err:" + err.Error()
  272. return
  273. }
  274. resp := new(models.PptDetailResp)
  275. resp.Ppt = ppt
  276. resp.PptPages = pptPages
  277. br.Ret = 200
  278. br.Success = true
  279. br.Msg = "获取成功"
  280. br.Data = resp
  281. }
  282. // @Title 图片上传
  283. // @Description 图片上传接口
  284. // @Param Img query string true "图片base64字符串"
  285. // @Param ResourceId query int true "策略组提供的资源id"
  286. // @Param PptId query int true "PptId"
  287. // @Param PptPagesId query int true "PptPagesId"
  288. // @Success 200 新增成功
  289. // @router /base64Upload [post]
  290. func (this *PptController) Base64Upload() {
  291. br := new(models.BaseResponse).Init()
  292. defer func() {
  293. this.Data["json"] = br
  294. this.ServeJSON()
  295. }()
  296. imgData := this.GetString("Image")
  297. if imgData == "" {
  298. br.Msg = "图片参数错误"
  299. br.ErrMsg = "图片参数错误,Img Is Empty"
  300. return
  301. }
  302. resourceId, err := this.GetInt("ResourceId")
  303. if err != nil {
  304. br.Msg = "参数错误"
  305. br.ErrMsg = "获取,策略组提供的资源id失败,Err:" + err.Error()
  306. return
  307. }
  308. pptId, err := this.GetInt("PptId")
  309. if err != nil {
  310. br.Msg = "参数错误"
  311. br.ErrMsg = "获取,pptId,Err:" + err.Error()
  312. return
  313. }
  314. pptPagesId, err := this.GetInt("PptPagesId")
  315. if err != nil {
  316. br.Msg = "参数错误"
  317. br.ErrMsg = "获取,策略组提供的资源id失败,Err:" + err.Error()
  318. return
  319. }
  320. dateDir := time.Now().Format("20060102")
  321. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  322. if !utils.FileIsExist(uploadDir) {
  323. err = os.MkdirAll(uploadDir, 777)
  324. if err != nil {
  325. br.Msg = "存储目录创建失败"
  326. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  327. return
  328. }
  329. }
  330. imgBase64 := base64.StdEncoding.EncodeToString([]byte(imgData))
  331. randStr := utils.GetRandStringNoSpecialChar(28)
  332. fileName := randStr + ".png"
  333. savePath := uploadDir + "/" + fileName
  334. err = utils.SaveBase64ToFile(imgBase64, savePath)
  335. if err != nil {
  336. br.Msg = "图片保存失败"
  337. br.ErrMsg = "图片保存失败,Err:" + err.Error()
  338. return
  339. }
  340. file, err := os.Open(savePath)
  341. if err != nil {
  342. br.Msg = "获取图片信息失败"
  343. br.ErrMsg = "获取图片信息失败,Err:" + err.Error()
  344. return
  345. }
  346. config, _, err := image.DecodeConfig(file)
  347. if err != nil {
  348. br.Msg = "获取图片信息失败"
  349. br.ErrMsg = "获取图片信息失败,Err:" + err.Error()
  350. return
  351. }
  352. width := config.Width
  353. height := config.Height
  354. //上传到阿里云
  355. resourceUrl, err := services.UploadAliyun(fileName, savePath)
  356. if err != nil {
  357. br.Msg = "文件上传失败"
  358. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  359. return
  360. }
  361. defer func() {
  362. os.Remove(savePath)
  363. }()
  364. item := new(models.Resource)
  365. item.ResourceUrl = resourceUrl
  366. item.ResourceType = 1
  367. item.CreateTime = time.Now()
  368. newId, err := models.AddResource(item)
  369. if err != nil {
  370. br.Msg = "资源上传失败"
  371. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  372. return
  373. }
  374. //修改路径
  375. err = models.ModifyPptPages(resourceUrl, resourceId, pptId, pptPagesId, width, height)
  376. if err != nil {
  377. br.Msg = "资源上传失败"
  378. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  379. return
  380. }
  381. resp := new(models.ResourceResp)
  382. resp.Id = newId
  383. resp.ResourceUrl = resourceUrl
  384. br.Msg = "上传成功"
  385. br.Ret = 200
  386. br.Success = true
  387. br.Data = resp
  388. return
  389. }
  390. // @Title ppt下载
  391. // @Description ppt下载
  392. // @Param PptId query int true "PptId"
  393. // @Success 200 下载成功
  394. // @router /download [get]
  395. func (this *PptController) Download() {
  396. br := new(models.BaseResponse).Init()
  397. defer func() {
  398. this.Data["json"] = br
  399. this.ServeJSON()
  400. }()
  401. pptId, err := this.GetInt("PptId")
  402. if err != nil {
  403. br.Msg = "参数错误"
  404. br.ErrMsg = "获取,pptId,Err:" + err.Error()
  405. return
  406. }
  407. ppt, err := models.GetPptById(pptId)
  408. if err != nil {
  409. br.Msg = "获取信息失败"
  410. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  411. return
  412. }
  413. filePath := ppt.PptUrl + ".ppt"
  414. fileName := ppt.Title + ".ppt"
  415. this.Ctx.Output.Download(filePath, fileName)
  416. return
  417. }
  418. // @Title ppt下载
  419. // @Description ppt下载
  420. // @Param PptId query int true "PptId"
  421. // @Success 200 下载成功
  422. // @router /downloadpptx [get]
  423. func (this *PptController) Downloadpptx() {
  424. br := new(models.BaseResponse).Init()
  425. defer func() {
  426. this.Data["json"] = br
  427. this.ServeJSON()
  428. }()
  429. pptId, err := this.GetInt("PptId")
  430. if err != nil {
  431. br.Msg = "参数错误"
  432. br.ErrMsg = "获取,pptId,Err:" + err.Error()
  433. return
  434. }
  435. ppt, err := models.GetPptById(pptId)
  436. if err != nil {
  437. br.Msg = "获取信息失败"
  438. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  439. return
  440. }
  441. filePath := ppt.PptUrl + ".pptx"
  442. fileName := ppt.Title + ".pptx"
  443. this.Ctx.Output.Download(filePath, fileName)
  444. return
  445. }
  446. // @Title 获取首页背景模板接口
  447. // @Description 获取首页背景模板接口
  448. // @Success 200 {object} models.PptImagesResp
  449. // @router /getImages [get]
  450. func (this *PptController) GetImages() {
  451. br := new(models.BaseResponse).Init()
  452. defer func() {
  453. this.Data["json"] = br
  454. this.ServeJSON()
  455. }()
  456. imageType := 0
  457. ppt, err := models.GetImages(imageType)
  458. if err != nil {
  459. br.Msg = "获取信息失败"
  460. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  461. return
  462. }
  463. resp := new(models.PptImagesResp)
  464. resp.List = ppt
  465. br.Data = resp
  466. br.Ret = 200
  467. br.Success = true
  468. br.Msg = "获取成功"
  469. return
  470. }
  471. // @Title 发布接口
  472. // @Description 发布接口
  473. // @Param request body models.PptPublishReq true "type json string"
  474. // @Success 200 {object} models.PptImagesResp
  475. // @router /publish [post]
  476. func (this *PptController) Publish() {
  477. br := new(models.BaseResponse).Init()
  478. defer func() {
  479. this.Data["json"] = br
  480. this.ServeJSON()
  481. }()
  482. var req models.PptPublishReq
  483. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  484. if err != nil {
  485. br.Msg = "参数解析异常!"
  486. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  487. return
  488. }
  489. pptId := req.PptId
  490. if pptId <= 0 {
  491. br.Msg = "参数错误"
  492. return
  493. }
  494. pptFirstPages, err := models.GetPptFirstPage(pptId)
  495. if err != nil {
  496. br.Msg = "获取数据失败"
  497. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  498. return
  499. }
  500. pptContentPages, err := models.GetPptContentPages(pptId, pptFirstPages.PptPagesId)
  501. if err != nil {
  502. br.Msg = "获取数据失败"
  503. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  504. return
  505. }
  506. dataMap := make(map[string]interface{})
  507. dataMap["FirstPage"] = pptFirstPages
  508. dataMap["ContentPage"] = pptContentPages
  509. dataMap["ScreenHeight"] = req.ScreenHeight
  510. postUrl := "http://127.0.0.1:5000/publish_ppt/" //随便写的
  511. postData, err := json.Marshal(dataMap)
  512. if err != nil {
  513. br.Msg = "获取数据失败"
  514. br.ErrMsg = "Marshal,Err:" + err.Error()
  515. return
  516. }
  517. result, err := http.Post(postUrl, string(postData))
  518. if err != nil {
  519. br.Msg = "发布失败"
  520. br.ErrMsg = "Marshal,Err:" + err.Error()
  521. return
  522. }
  523. var pptResult PublishPptResult
  524. err = json.Unmarshal(result, &pptResult)
  525. if err != nil {
  526. br.Msg = "获取数据失败"
  527. br.ErrMsg = "Marshal,Err:" + err.Error()
  528. return
  529. }
  530. err = models.EditPptPath(pptId, pptResult.PptFullPath)
  531. if err != nil {
  532. br.Msg = "发布失败"
  533. br.ErrMsg = "发布失败,Err:" + err.Error()
  534. return
  535. }
  536. br.Ret = 200
  537. br.Success = true
  538. br.Msg = "发布成功"
  539. return
  540. }
  541. type PublishPptResult struct {
  542. Result string
  543. PptPath string
  544. PptName string
  545. PptFullPath string
  546. }
  547. /*
  548. func init() {
  549. fmt.Println("start")
  550. var err error
  551. defer func() {
  552. if err != nil {
  553. fmt.Println("err:", err.Error())
  554. }
  555. }()
  556. pptId := 111
  557. if pptId <= 0 {
  558. return
  559. }
  560. pptFirstPages, err := models.GetPptFirstPage(pptId)
  561. if err != nil {
  562. return
  563. }
  564. pptContentPages, err := models.GetPptContentPages(pptId, pptFirstPages.PptPagesId)
  565. if err != nil {
  566. return
  567. }
  568. dataMap := make(map[string]interface{})
  569. dataMap["FirstPage"] = pptFirstPages
  570. dataMap["ContentPage"] = pptContentPages
  571. dataMap["ScreenHeight"] = 12000
  572. postUrl := "http://127.0.0.1:5000/publish_ppt/" //随便写的
  573. postData, err := json.Marshal(dataMap)
  574. if err != nil {
  575. return
  576. }
  577. utils.FileLog.Info("%s",string(postData))
  578. result, err := http.Post(postUrl, string(postData))
  579. fmt.Println("result:", string(result))
  580. if err != nil {
  581. return
  582. }
  583. var pptResult PublishPptResult
  584. err = json.Unmarshal(result, &pptResult)
  585. if err != nil {
  586. return
  587. }
  588. fmt.Println("ppt:", pptResult.PptFullPath)
  589. fmt.Println("end")
  590. }
  591. */