ppt_english.go 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/company"
  6. "eta/eta_api/models/data_manage/excel"
  7. "eta/eta_api/models/ppt_english"
  8. "eta/eta_api/services"
  9. "eta/eta_api/services/ppt"
  10. "eta/eta_api/utils"
  11. _ "image/gif"
  12. _ "image/jpeg"
  13. _ "image/png"
  14. "os"
  15. "path"
  16. "strconv"
  17. "strings"
  18. "time"
  19. "github.com/rdlucklib/rdluck_tools/paging"
  20. )
  21. // PptEnglishController 新版ppt模块
  22. type PptEnglishController struct {
  23. BaseAuthController
  24. }
  25. // PptEnglishCommonController 新版ppt公共模块
  26. type PptEnglishCommonController struct {
  27. BaseCommonController
  28. }
  29. // ListPpt
  30. // @Title 获取ppt列表
  31. // @Description 获取ppt列表接口
  32. // @Param PageSize query int true "每页数据条数"
  33. // @Param CurrentIndex query int true "当前页页码,从1开始"
  34. // @Param KeyWord query string true "搜索关键词"
  35. // @Success 200 {object} ppt_english.PptEnglishListResp
  36. // @router /list [get]
  37. func (this *PptEnglishController) ListPpt() {
  38. br := new(models.BaseResponse).Init()
  39. defer func() {
  40. this.Data["json"] = br
  41. this.ServeJSON()
  42. }()
  43. sysUser := this.SysUser
  44. if sysUser == nil {
  45. br.Msg = "请登录"
  46. br.ErrMsg = "请登录,SysUser Is Empty"
  47. return
  48. }
  49. pageSize, _ := this.GetInt("PageSize")
  50. currentIndex, _ := this.GetInt("CurrentIndex")
  51. keyWord := this.GetString("KeyWord")
  52. var startSize int
  53. if pageSize <= 0 {
  54. pageSize = utils.PageSize20
  55. }
  56. if currentIndex <= 0 {
  57. currentIndex = 1
  58. }
  59. startSize = utils.StartIndex(currentIndex, pageSize)
  60. var condition string
  61. var pars []interface{}
  62. if keyWord != "" {
  63. condition += ` AND (title LIKE ? OR admin_real_name LIKE ? ) `
  64. pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
  65. }
  66. total, err := ppt_english.GetPptEnglishListCount(condition, pars)
  67. if err != nil {
  68. br.Msg = "获取失败"
  69. br.ErrMsg = "获取失败,Err:" + err.Error()
  70. return
  71. }
  72. list, err := ppt_english.GetPptEnglishList(condition, pars, startSize, pageSize)
  73. if err != nil {
  74. br.Msg = "获取失败"
  75. br.ErrMsg = "获取失败,Err:" + err.Error()
  76. return
  77. }
  78. lenList := len(list)
  79. for i := 0; i < lenList; i++ {
  80. adminId := list[i].AdminId
  81. if adminId == sysUser.AdminId || sysUser.Role == "admin" {
  82. list[i].IsAuth = true
  83. } else {
  84. list[i].IsAuth = false
  85. }
  86. }
  87. page := paging.GetPaging(currentIndex, pageSize, total)
  88. resp := new(ppt_english.PptEnglishListResp)
  89. resp.Paging = page
  90. resp.List = list
  91. br.Ret = 200
  92. br.Success = true
  93. br.Msg = "获取成功"
  94. br.Data = resp
  95. }
  96. // AddPpt
  97. // @Title 新增ppt
  98. // @Description 新增ppt接口
  99. // @Param request body ppt_english.AddPptEnglishReq true "type json string"
  100. // @Success 200 Ret=200 新增成功
  101. // @router /add [post]
  102. func (this *PptEnglishController) AddPpt() {
  103. br := new(models.BaseResponse).Init()
  104. defer func() {
  105. this.Data["json"] = br
  106. this.ServeJSON()
  107. }()
  108. var req ppt_english.AddPptEnglishReq
  109. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  110. if err != nil {
  111. br.Msg = "参数解析异常!"
  112. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  113. return
  114. }
  115. if req.FirstPage.Title == "" {
  116. br.Msg = "标题不能为空"
  117. return
  118. }
  119. var newId int64
  120. var msg string
  121. if req.PptId <= 0 {
  122. if req.GroupId == 0 {
  123. br.Msg = "请输入目录ID"
  124. return
  125. }
  126. item, err := ppt_english.GetPptEnglishByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
  127. if err != nil && err.Error() != utils.ErrNoRow() {
  128. br.Msg = "获取数据异常!"
  129. br.ErrMsg = "获取数据异常,Err:" + err.Error()
  130. return
  131. }
  132. if item != nil {
  133. br.Msg = "标题已存在,不可重复添加"
  134. br.IsSendEmail = false
  135. return
  136. }
  137. pptInfo := &ppt_english.PptEnglish{
  138. //PptId: 0,
  139. TemplateType: req.FirstPage.TemplateType,
  140. BackgroundImg: req.FirstPage.ImgUrl,
  141. Title: req.FirstPage.Title,
  142. ReportType: req.FirstPage.ReportType,
  143. PptDate: req.FirstPage.PptDate,
  144. Content: req.Content,
  145. CoverContent: req.CoverContent,
  146. CreateTime: time.Now(),
  147. ModifyTime: time.Now(),
  148. AdminId: this.SysUser.AdminId,
  149. AdminRealName: this.SysUser.RealName,
  150. TitleSetting: req.TitleSetting,
  151. }
  152. newId, err = ppt_english.AddPptEnglish(pptInfo)
  153. if err != nil {
  154. br.Msg = "新增失败"
  155. br.ErrMsg = "新增失败,Err:" + err.Error()
  156. return
  157. }
  158. //新增ppt和目录映射
  159. _, err = ppt.AddGroupPptEnglishMapping(newId, req.GroupId, this.SysUser.AdminId, this.SysUser.RealName)
  160. if err != nil {
  161. br.Msg = err.Error()
  162. return
  163. }
  164. msg = "新增成功"
  165. excelReferences := make([]*excel.ReferencedExcelConfig, len(req.ExcelReferences))
  166. for _, r := range req.ExcelReferences {
  167. refItem := excel.ReferencedExcelConfig{
  168. UniqueCode: r.UniqueCode,
  169. ReferencedId: int(newId),
  170. FromScene: 5,
  171. Uuid: r.Uuid,
  172. WidthList: r.WidthList,
  173. HeightList: r.HeightList,
  174. OpUserId: this.SysUser.AdminId,
  175. OpUserName: this.SysUser.RealName,
  176. CreateTime: time.Now(),
  177. ModifyTime: time.Now(),
  178. }
  179. excelReferences = append(excelReferences, &refItem)
  180. }
  181. err = excel.AddReferencedExcelConfig(excelReferences)
  182. if err != nil {
  183. br.Msg = "新增引用失败"
  184. br.ErrMsg = "新增引用失败,Err:" + err.Error()
  185. return
  186. }
  187. } else {
  188. newId = req.PptId
  189. pptInfo, err := ppt_english.GetPptEnglishById(int(req.PptId))
  190. if err != nil {
  191. br.Msg = "信息获取失败"
  192. br.ErrMsg = "信息获取失败,Err:" + err.Error()
  193. return
  194. }
  195. pptInfo.TemplateType = req.FirstPage.TemplateType
  196. pptInfo.BackgroundImg = req.FirstPage.ImgUrl
  197. pptInfo.Title = req.FirstPage.Title
  198. pptInfo.ReportType = req.FirstPage.ReportType
  199. pptInfo.PptDate = req.FirstPage.PptDate
  200. pptInfo.Content = req.Content
  201. pptInfo.CoverContent = req.CoverContent
  202. pptInfo.ModifyTime = time.Now()
  203. pptInfo.TitleSetting = req.TitleSetting
  204. err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent", "TitleSetting"})
  205. msg = "保存成功"
  206. }
  207. resp := ppt_english.AddPptEnglishResp{
  208. PptId: newId,
  209. }
  210. br.Ret = 200
  211. br.Success = true
  212. br.Msg = msg
  213. br.Data = resp
  214. }
  215. // EditPpt
  216. // @Title 编辑ppt
  217. // @Description 编辑ppt接口
  218. // @Param request body ppt_english.AddPptEnglishReq true "type json string"
  219. // @Success 200 Ret=200 编辑成功
  220. // @router /edit [post]
  221. func (this *PptEnglishController) EditPpt() {
  222. br := new(models.BaseResponse).Init()
  223. defer func() {
  224. this.Data["json"] = br
  225. this.ServeJSON()
  226. }()
  227. var req ppt_english.AddPptEnglishReq
  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. if req.FirstPage.Title == "" {
  235. br.Msg = "标题不能为空"
  236. return
  237. }
  238. item, err := ppt_english.GetPptEnglishByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
  239. if err != nil && err.Error() != utils.ErrNoRow() {
  240. br.Msg = "获取数据异常!"
  241. br.ErrMsg = "获取数据异常,Err:" + err.Error()
  242. return
  243. }
  244. if item != nil && item.PptId != int(req.PptId) {
  245. br.Msg = "标题已存在,不可重复添加"
  246. br.IsSendEmail = false
  247. return
  248. }
  249. pptInfo, err := ppt_english.GetPptEnglishById(int(req.PptId))
  250. if err != nil {
  251. br.Msg = "信息获取失败"
  252. br.ErrMsg = "信息获取失败,Err:" + err.Error()
  253. return
  254. }
  255. // 判断权限
  256. if pptInfo.AdminId != this.SysUser.AdminId {
  257. _, err := ppt_english.GetPPtGrantConf(pptInfo.PptId, this.SysUser.AdminId)
  258. if err != nil {
  259. if err.Error() == utils.ErrNoRow() {
  260. br.Msg = `该PPT已取消共享,保存失败`
  261. br.ErrMsg = `该PPT已取消共享,保存失败`
  262. br.IsSendEmail = false
  263. } else {
  264. br.Msg = `保存失败`
  265. br.ErrMsg = `保存失败,ERR:` + err.Error()
  266. }
  267. return
  268. }
  269. }
  270. // 修改
  271. pptInfo.TemplateType = req.FirstPage.TemplateType
  272. pptInfo.BackgroundImg = req.FirstPage.ImgUrl
  273. pptInfo.Title = req.FirstPage.Title
  274. pptInfo.ReportType = req.FirstPage.ReportType
  275. pptInfo.PptDate = req.FirstPage.PptDate
  276. pptInfo.Content = req.Content
  277. pptInfo.CoverContent = req.CoverContent
  278. pptInfo.ModifyTime = time.Now()
  279. pptInfo.TitleSetting = req.TitleSetting
  280. err = pptInfo.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "CoverContent", "TitleSetting"})
  281. if err != nil {
  282. br.Msg = "编辑失败"
  283. br.ErrMsg = "编辑失败,Err:" + err.Error()
  284. return
  285. }
  286. pptMap, err := ppt_english.GetPptMappingByPptId(req.PptId)
  287. if err != nil {
  288. br.Msg = `该PPT信息不存在, 保存失败`
  289. br.ErrMsg = `该PPT信息不存在, 保存失败, Err` + err.Error()
  290. br.IsSendEmail = false
  291. return
  292. }
  293. pptMapList, err := ppt_english.GetPptMappingListByGroupIdDesc(pptMap.GroupId)
  294. if err != nil {
  295. br.ErrMsg = "PPT目录信息异常"
  296. return
  297. }
  298. count, err := ppt_english.GetPptMappingCountByGroupPptId(pptMap.GroupPptId, this.SysUser.AdminId)
  299. if err != nil {
  300. br.Msg = "获取英文PPT和用户权限关系失败"
  301. br.ErrMsg = "获取英文PPT和用户权限关系失败, Err:" + err.Error()
  302. return
  303. }
  304. if !pptMap.IsMoved && len(pptMapList) > 1 && count > 0 {
  305. // 如果没有人为移动位置, 默认将当前ppt置顶
  306. err = ppt.MoveGroupPptEnglish(pptMap.GroupId, pptMap.GroupPptId, pptMapList[0].GroupPptId, 0, this.SysUser.AdminId)
  307. if err != nil {
  308. br.Msg = err.Error()
  309. br.ErrMsg = "移动失败,Err:" + err.Error()
  310. return
  311. }
  312. }
  313. // 日志记录
  314. {
  315. logInfo := &ppt_english.PptEnglishSaveLog{
  316. PptId: pptInfo.PptId,
  317. TemplateType: pptInfo.TemplateType,
  318. BackgroundImg: pptInfo.BackgroundImg,
  319. Title: pptInfo.Title,
  320. ReportType: pptInfo.ReportType,
  321. PptDate: pptInfo.PptDate,
  322. Content: pptInfo.Content,
  323. CoverContent: pptInfo.CoverContent,
  324. AdminId: this.SysUser.AdminId,
  325. AdminRealName: this.SysUser.RealName,
  326. CreateTime: time.Now(),
  327. TitleSetting: req.TitleSetting,
  328. }
  329. _, err = ppt_english.AddPptEnglishSaveLog(logInfo)
  330. }
  331. resp := ppt_english.AddPptEnglishResp{
  332. PptId: req.PptId,
  333. }
  334. br.Ret = 200
  335. br.Success = true
  336. br.Msg = "编辑成功"
  337. br.IsAddLog = true
  338. br.Data = resp
  339. }
  340. // DeletePpt
  341. // @Title 删除ppt
  342. // @Description 删除ppt接口
  343. // @Param request body ppt_english.DeletePptEnglishReq true "type json string"
  344. // @Success 200 Ret=200 删除成功
  345. // @router /delete [post]
  346. func (this *PptEnglishController) DeletePpt() {
  347. br := new(models.BaseResponse).Init()
  348. defer func() {
  349. this.Data["json"] = br
  350. this.ServeJSON()
  351. }()
  352. var req ppt_english.DeletePptEnglishReq
  353. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  354. if err != nil {
  355. br.Msg = "参数解析异常!"
  356. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  357. return
  358. }
  359. if req.PptId <= 0 {
  360. br.Msg = "参数错误"
  361. return
  362. }
  363. pptInfo, err := ppt_english.GetPptEnglishById(req.PptId)
  364. if err != nil {
  365. br.Msg = "ppt不存在"
  366. return
  367. }
  368. if pptInfo.AdminId != this.SysUser.AdminId {
  369. br.Msg = "无权删除"
  370. return
  371. }
  372. err = ppt_english.DeletePptEnglish(req.PptId)
  373. if err != nil {
  374. br.Msg = "删除失败"
  375. br.ErrMsg = "删除失败,Err:" + err.Error()
  376. return
  377. }
  378. //如果该ppt存在单个共享记录,则删除共享
  379. err = ppt.DeleteGroupPptEnglish(req.PptId)
  380. if err != nil {
  381. br.Msg = "删除失败"
  382. br.ErrMsg = "删除失败,Err:" + err.Error()
  383. return
  384. }
  385. br.Ret = 200
  386. br.Success = true
  387. br.IsAddLog = true
  388. br.Msg = "删除成功"
  389. }
  390. // DetailPpt
  391. // @Title 获取ppt详情
  392. // @Description 获取ppt详情接口
  393. // @Param PptId query int true "PptId"
  394. // @Success 200 {object} ppt_english.PptEnglish
  395. // @router /detail [get]
  396. func (this *PptEnglishController) DetailPpt() {
  397. br := new(models.BaseResponse).Init()
  398. defer func() {
  399. if br.ErrMsg == "" {
  400. br.IsSendEmail = false
  401. }
  402. this.Data["json"] = br
  403. this.ServeJSON()
  404. }()
  405. sysUser := this.SysUser
  406. if sysUser == nil {
  407. br.Msg = "请登录"
  408. br.ErrMsg = "请登录,SysUser Is Empty"
  409. br.Ret = 408
  410. return
  411. }
  412. pptId, _ := this.GetInt("PptId")
  413. pptInfo, err := ppt_english.GetPptEnglishById(pptId)
  414. if err != nil {
  415. br.Msg = "信息获取失败"
  416. br.ErrMsg = "信息获取失败,Err:" + err.Error()
  417. return
  418. }
  419. // 查询编辑中
  420. editor, e := services.UpdatePptEditing(pptId, 0, sysUser.AdminId, sysUser.RealName, true)
  421. if e != nil {
  422. br.Msg = "操作失败"
  423. br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
  424. return
  425. }
  426. resp := new(ppt_english.EnglishPPTDetailResp)
  427. resp.PptEnglish = pptInfo
  428. resp.Editor = editor
  429. br.Ret = 200
  430. br.Success = true
  431. br.Msg = "获取成功"
  432. br.Data = resp
  433. }
  434. // DownloadPptx
  435. // @Title ppt下载
  436. // @Description ppt下载
  437. // @Param PptId query int true "PptId"
  438. // @Success 200 下载成功
  439. // @router /downloadpptx [get]
  440. func (this *PptEnglishCommonController) DownloadPptx() {
  441. br := new(models.BaseResponse).Init()
  442. defer func() {
  443. this.Data["json"] = br
  444. this.ServeJSON()
  445. }()
  446. pptId, err := this.GetInt("PptId")
  447. if err != nil {
  448. br.Msg = "参数错误"
  449. br.ErrMsg = "获取,pptId,Err:" + err.Error()
  450. return
  451. }
  452. pptInfo, err := ppt_english.GetPptEnglishById(pptId)
  453. if err != nil {
  454. br.Msg = "获取信息失败"
  455. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  456. return
  457. }
  458. filePath := pptInfo.PptxUrl
  459. fileName := pptInfo.Title + ".pptx"
  460. this.Ctx.Output.Download(filePath, fileName)
  461. br.Success = true
  462. br.Ret = 200
  463. br.Msg = "下载成功"
  464. return
  465. }
  466. // Publish
  467. // @Title 发布接口
  468. // @Description 发布接口
  469. // @Param request body ppt_english.SavePptEnglishPathReq true "type json string"
  470. // @Success Ret=200 发布成功
  471. // @router /publish [post]
  472. func (this *PptEnglishController) Publish() {
  473. br := new(models.BaseResponse).Init()
  474. defer func() {
  475. this.Data["json"] = br
  476. this.ServeJSON()
  477. }()
  478. //SavePptEnglishPathReq
  479. //PptEnglishPublishReq
  480. var req ppt_english.SavePptEnglishPathReq
  481. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  482. if err != nil {
  483. br.Msg = "参数解析异常!"
  484. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  485. return
  486. }
  487. pptId := req.PptId
  488. if pptId <= 0 {
  489. br.Msg = "参数错误"
  490. return
  491. }
  492. err = ppt_english.EditPptEnglishPath(pptId, req.PptxUrl)
  493. if err != nil {
  494. br.Msg = "发布失败"
  495. br.ErrMsg = "发布失败,Err:" + err.Error()
  496. return
  497. }
  498. //添加发布记录
  499. {
  500. record := new(ppt_english.PptEnglishPublishRecord)
  501. record.CreateTime = time.Now()
  502. record.PptId = pptId
  503. record.PptUrl = req.PptxUrl
  504. go ppt_english.AddPptEnglishPublishRecord(record)
  505. }
  506. br.Ret = 200
  507. br.Success = true
  508. br.Msg = "发布成功"
  509. br.IsAddLog = true
  510. return
  511. }
  512. // PptUpload
  513. // @Title ppt上传
  514. // @Description ppt上传
  515. // @Param PptId query int true "PptId"
  516. // @Success 200 新增成功
  517. // @router /pptUpload [post]
  518. func (this *PptEnglishController) PptUpload() {
  519. br := new(models.BaseResponse).Init()
  520. defer func() {
  521. this.Data["json"] = br
  522. this.ServeJSON()
  523. }()
  524. pptId, _ := this.GetInt("PptId", 0)
  525. if pptId <= 0 {
  526. br.Msg = "参数错误"
  527. return
  528. }
  529. _, err := ppt_english.GetPptEnglishById(pptId)
  530. if err != nil {
  531. br.Msg = "获取数据失败"
  532. br.ErrMsg = "获取PPT详情失败,Err:" + err.Error()
  533. return
  534. }
  535. f, h, err := this.GetFile("file")
  536. if err != nil {
  537. br.Msg = "获取资源信息失败"
  538. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  539. return
  540. }
  541. uploadFileName := h.Filename //上传的文件名
  542. ext := path.Ext(h.Filename)
  543. dateDir := time.Now().Format("20060102")
  544. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  545. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  546. if err != nil {
  547. br.Msg = "存储目录创建失败"
  548. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  549. return
  550. }
  551. randStr := utils.GetRandStringNoSpecialChar(28)
  552. fileName := randStr + ext
  553. fpath := uploadDir + "/" + fileName
  554. defer f.Close() //关闭上传文件
  555. err = this.SaveToFile("file", fpath)
  556. if err != nil {
  557. br.Msg = "文件上传失败"
  558. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  559. return
  560. }
  561. hzUploadDir := "ppt/"
  562. savePptxToOssPath := hzUploadDir + time.Now().Format("200601/20060102/")
  563. //pptName := strings.Replace(pptItem.Title, "\n", "", -1)
  564. //pptName = strings.TrimSuffix(pptName, " ")
  565. pptName := utils.GetRandStringNoSpecialChar(28)
  566. savePptxToOssPath += pptName + ".pptx"
  567. defer func() {
  568. _ = os.Remove(fpath)
  569. }()
  570. //上传到阿里云 和 minio
  571. pptxUrl := ``
  572. //if utils.ObjectStorageClient == "minio" {
  573. // err = services.UploadFileToMinIo("", fpath, savePptxToOssPath)
  574. // if err != nil {
  575. // br.Msg = "文件上传失败"
  576. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  577. // return
  578. // }
  579. // pptxUrl = utils.MinIoImghost + savePptxToOssPath
  580. //} else {
  581. // err = services.UploadFileToAliyun("", fpath, savePptxToOssPath)
  582. // if err != nil {
  583. // br.Msg = "文件上传失败"
  584. // br.ErrMsg = "文件上传失败,Err:" + err.Error()
  585. // return
  586. // }
  587. // pptxUrl = utils.Imghost + savePptxToOssPath
  588. //}
  589. ossClient := services.NewOssClient()
  590. if ossClient == nil {
  591. br.Msg = "上传失败"
  592. br.ErrMsg = "初始化OSS服务失败"
  593. return
  594. }
  595. pptxUrl, err = ossClient.UploadFile("", fpath, savePptxToOssPath)
  596. if err != nil {
  597. br.Msg = "文件上传失败"
  598. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  599. return
  600. }
  601. item := &models.Resource{
  602. //Id: 0,
  603. ResourceUrl: pptxUrl,
  604. CreateTime: time.Now(),
  605. ResourceType: 4,
  606. }
  607. newId, err := models.AddResource(item)
  608. if err != nil {
  609. br.Msg = "资源上传失败"
  610. br.ErrMsg = "资源上传失败,Err:" + err.Error()
  611. return
  612. }
  613. resp := models.ResourceResp{
  614. Id: newId,
  615. ResourceUrl: pptxUrl,
  616. ResourceName: uploadFileName,
  617. }
  618. br.Msg = "上传成功"
  619. br.Ret = 200
  620. br.Success = true
  621. br.Data = resp
  622. return
  623. }
  624. // SaveLog
  625. // @Title 定时ppt操作日志记录
  626. // @Description 定时ppt操作日志记录
  627. // @Param request body ppt_english.AddPptEnglishReq true "type json string"
  628. // @Success 200 新增成功
  629. // @router /saveLog [post]
  630. func (this *PptEnglishController) SaveLog() {
  631. br := new(models.BaseResponse).Init()
  632. defer func() {
  633. if br.ErrMsg == "" {
  634. br.IsSendEmail = false
  635. }
  636. this.Data["json"] = br
  637. this.ServeJSON()
  638. }()
  639. sysUser := this.SysUser
  640. if sysUser == nil {
  641. br.Msg = "请登录"
  642. br.ErrMsg = "请登录,SysUser Is Empty"
  643. br.Ret = 408
  644. return
  645. }
  646. var req ppt_english.AddPptEnglishReq
  647. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  648. if err != nil {
  649. br.Msg = "参数解析异常!"
  650. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  651. return
  652. }
  653. if req.FirstPage.Title == "" {
  654. br.Msg = "标题不能为空"
  655. return
  656. }
  657. var pageContent []services.PPTContent
  658. err = json.Unmarshal([]byte(req.Content), &pageContent)
  659. if err != nil {
  660. br.Msg = "参数解析异常!"
  661. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  662. return
  663. }
  664. // 获取ppt
  665. item, err := ppt_english.GetPptEnglishByTitleAndId(req.FirstPage.Title, this.SysUser.AdminId)
  666. if err != nil && err.Error() != utils.ErrNoRow() {
  667. br.Msg = "获取数据异常!"
  668. br.ErrMsg = "获取数据异常,Err:" + err.Error()
  669. return
  670. }
  671. if item != nil && item.PptId != int(req.PptId) {
  672. br.Msg = "标题已存在,不可重复添加"
  673. br.IsSendEmail = false
  674. return
  675. }
  676. //变更ppt内容
  677. pptItem, e := ppt_english.GetPptEnglishById(int(req.PptId))
  678. if e != nil {
  679. if e.Error() == utils.ErrNoRow() {
  680. br.Msg = "PPT已被删除, 请刷新页面"
  681. return
  682. }
  683. br.Msg = "信息获取失败"
  684. br.ErrMsg = "信息获取失败,Err:" + e.Error()
  685. return
  686. }
  687. // 标记编辑状态
  688. if pptItem.PptId > 0 {
  689. _, e = services.UpdatePptEditing(pptItem.PptId, 1, sysUser.AdminId, sysUser.RealName, true)
  690. if e != nil {
  691. br.Msg = "操作失败"
  692. br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
  693. return
  694. }
  695. }
  696. pptItem.TemplateType = req.FirstPage.TemplateType
  697. pptItem.BackgroundImg = req.FirstPage.ImgUrl
  698. pptItem.Title = req.FirstPage.Title
  699. pptItem.ReportType = req.FirstPage.ReportType
  700. pptItem.PptDate = req.FirstPage.PptDate
  701. pptItem.Content = req.Content
  702. pptItem.ModifyTime = time.Now()
  703. pptItem.PptPage = len(pageContent)
  704. err = pptItem.Update([]string{"TemplateType", "BackgroundImg", "Title", "ReportType", "PptDate", "Content", "ModifyTime", "ppt_page"})
  705. pptMap, err := ppt_english.GetPptMappingByPptId(req.PptId)
  706. if err != nil {
  707. br.Msg = `该PPT信息不存在, 保存失败`
  708. br.ErrMsg = `该PPT信息不存在, 保存失败, Err` + err.Error()
  709. br.IsSendEmail = false
  710. return
  711. }
  712. pptMapList, err := ppt_english.GetPptMappingListByGroupIdDesc(pptMap.GroupId)
  713. if err != nil {
  714. br.ErrMsg = "PPT目录信息异常"
  715. return
  716. }
  717. count, err := ppt_english.GetPptMappingCountByGroupPptId(pptMap.GroupPptId, this.SysUser.AdminId)
  718. if err != nil {
  719. br.Msg = "获取英文PPT和用户权限关系失败"
  720. br.ErrMsg = "获取英文PPT和用户权限关系失败, Err:" + err.Error()
  721. return
  722. }
  723. if !pptMap.IsMoved && len(pptMapList) > 1 && count > 0 {
  724. // 如果没有人为移动位置, 且当前用户有权限, 默认将当前ppt置顶
  725. err = ppt.MoveGroupPptEnglish(pptMap.GroupId, pptMap.GroupPptId, pptMapList[0].GroupPptId, 0, this.SysUser.AdminId)
  726. if err != nil {
  727. br.Msg = err.Error()
  728. br.ErrMsg = "移动失败,Err:" + err.Error()
  729. return
  730. }
  731. }
  732. //日志记录
  733. logInfo := &ppt_english.PptEnglishSaveLog{
  734. PptId: int(req.PptId),
  735. TemplateType: req.FirstPage.TemplateType,
  736. BackgroundImg: req.FirstPage.ImgUrl,
  737. Title: req.FirstPage.Title,
  738. ReportType: req.FirstPage.ReportType,
  739. PptDate: req.FirstPage.PptDate,
  740. Content: req.Content,
  741. CoverContent: req.CoverContent,
  742. AdminId: this.SysUser.AdminId,
  743. AdminRealName: this.SysUser.RealName,
  744. CreateTime: time.Now(),
  745. TitleSetting: req.TitleSetting,
  746. }
  747. _, err = ppt_english.AddPptEnglishSaveLog(logInfo)
  748. if err != nil {
  749. br.Msg = "保存失败"
  750. br.ErrMsg = "保存PPT日志失败, Err: " + err.Error()
  751. return
  752. }
  753. br.Ret = 200
  754. br.Success = true
  755. br.Msg = "保存成功"
  756. }
  757. // GetConfig
  758. // @Title 获取ppt配置
  759. // @Description 获取ppt列表接口
  760. // @Param PageSize query int true "每页数据条数"
  761. // @Param CurrentIndex query int true "当前页页码,从1开始"
  762. // @Param KeyWord query string true "搜索关键词"
  763. // @Success 200 {object} ppt_english.PptEnglishListResp
  764. // @router /config [get]
  765. func (this *PptEnglishController) GetConfig() {
  766. br := new(models.BaseResponse).Init()
  767. defer func() {
  768. this.Data["json"] = br
  769. this.ServeJSON()
  770. }()
  771. crmConfig, err := company.GetConfigDetailByCode("ppt_limit")
  772. if err != nil {
  773. br.Msg = "获取配置失败"
  774. br.ErrMsg = "获取配置失败"
  775. br.IsSendEmail = false
  776. return
  777. }
  778. resp := new(ppt_english.PptEnglishConfigResp)
  779. err = json.Unmarshal([]byte(crmConfig.ConfigValue), resp)
  780. if err != nil {
  781. br.Msg = "获取配置失败"
  782. br.ErrMsg = "获取配置失败;err:" + err.Error()
  783. br.IsSendEmail = false
  784. return
  785. }
  786. br.Ret = 200
  787. br.Success = true
  788. br.Msg = "获取成功"
  789. br.Data = resp
  790. }
  791. // Grant
  792. // @Title 分配ppt权限
  793. // @Description 分配ppt权限接口
  794. // @Param request body ppt_english.GrantPptReq true "type json string"
  795. // @Success 200 Ret=200 分配成功
  796. // @router /grant [post]
  797. func (this *PptEnglishController) Grant() {
  798. br := new(models.BaseResponse).Init()
  799. defer func() {
  800. this.Data["json"] = br
  801. this.ServeJSON()
  802. }()
  803. var req ppt_english.GrantPptReq
  804. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  805. if err != nil {
  806. br.Msg = "参数解析异常!"
  807. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  808. return
  809. }
  810. if req.PptId <= 0 {
  811. br.Msg = "参数错误"
  812. return
  813. }
  814. // 查找ppt信息
  815. pptInfo, err := ppt_english.GetPptEnglishById(req.PptId)
  816. if err != nil {
  817. br.Msg = "ppt不存在"
  818. return
  819. }
  820. if pptInfo.AdminId != this.SysUser.AdminId {
  821. br.Msg = "无权配置"
  822. return
  823. }
  824. // 分配
  825. err, errMsg := ppt.GrantPptEnglish(req.PptId, req.GrantType, req.AdminIdStr, this.SysUser.AdminId)
  826. if errMsg != `` {
  827. br.Msg = errMsg
  828. br.ErrMsg = errMsg
  829. if err != nil {
  830. br.ErrMsg = errMsg + ";Err:" + err.Error()
  831. } else {
  832. br.IsSendEmail = false
  833. }
  834. return
  835. }
  836. br.Ret = 200
  837. br.Success = true
  838. br.IsAddLog = true
  839. br.Msg = "分配成功"
  840. }
  841. // CancelGrant
  842. // @Title 取消分配ppt权限
  843. // @Description 取消分配ppt权限
  844. // @Param request body ppt_english.DeletePptEnglishReq true "type json string"
  845. // @Success 200 Ret=200 分配成功
  846. // @router /grant/cancel [post]
  847. func (this *PptEnglishController) CancelGrant() {
  848. br := new(models.BaseResponse).Init()
  849. defer func() {
  850. this.Data["json"] = br
  851. this.ServeJSON()
  852. }()
  853. var req ppt_english.DeletePptEnglishReq
  854. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  855. if err != nil {
  856. br.Msg = "参数解析异常!"
  857. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  858. return
  859. }
  860. if req.PptId <= 0 {
  861. br.Msg = "参数错误"
  862. return
  863. }
  864. // 查找ppt信息
  865. pptInfo, err := ppt_english.GetPptEnglishById(req.PptId)
  866. if err != nil {
  867. br.Msg = "ppt不存在"
  868. return
  869. }
  870. if pptInfo.AdminId != this.SysUser.AdminId {
  871. br.Msg = "无权取消配置"
  872. return
  873. }
  874. // 分配
  875. err, errMsg := ppt.DeleteGrantPptEnglish(req.PptId)
  876. if errMsg != `` {
  877. br.Msg = errMsg
  878. br.ErrMsg = errMsg
  879. if err != nil {
  880. br.ErrMsg = errMsg + ";Err:" + err.Error()
  881. } else {
  882. br.IsSendEmail = false
  883. }
  884. return
  885. }
  886. br.Ret = 200
  887. br.Success = true
  888. br.IsAddLog = true
  889. br.Msg = "取消成功"
  890. }
  891. // GrantInfo
  892. // @Title 获取分配ppt权限详情
  893. // @Description 获取分配ppt权限详情接口
  894. // @Param PptId query int true "ppt的id"
  895. // @Success 200 {object} ppt_english.GrantInfoResp
  896. // @router /grant/info [get]
  897. func (this *PptEnglishController) GrantInfo() {
  898. br := new(models.BaseResponse).Init()
  899. defer func() {
  900. this.Data["json"] = br
  901. this.ServeJSON()
  902. }()
  903. pptId, _ := this.GetInt("PptId")
  904. if pptId <= 0 {
  905. br.Msg = "参数错误"
  906. return
  907. }
  908. // 查找ppt信息
  909. pptInfo, err := ppt_english.GetPptEnglishById(pptId)
  910. if err != nil {
  911. br.Msg = "ppt不存在"
  912. return
  913. }
  914. if pptInfo.AdminId != this.SysUser.AdminId {
  915. br.Msg = "无权配置"
  916. return
  917. }
  918. pptGrantInfoList, err := ppt_english.GetPPtGrantInfo(pptId)
  919. if err != nil {
  920. br.Msg = "信息获取失败"
  921. br.ErrMsg = "信息获取失败,Err:" + err.Error()
  922. return
  923. }
  924. if len(pptGrantInfoList) <= 0 {
  925. br.Msg = "未配置"
  926. br.IsSendEmail = false
  927. return
  928. }
  929. grantType := 0
  930. var adminIdStr string
  931. if pptGrantInfoList[0].DepartmentId > 0 { //分配类型;1:全部ficc研究员;2:指定成员
  932. grantType = 1
  933. } else {
  934. grantType = 2
  935. adminIdsList := make([]string, 0)
  936. for _, v := range pptGrantInfoList {
  937. adminIdsList = append(adminIdsList, strconv.Itoa(int(v.GrantAdminId)))
  938. }
  939. adminIdStr = strings.Join(adminIdsList, ",")
  940. }
  941. br.Ret = 200
  942. br.Success = true
  943. br.Data = ppt_english.GrantInfoResp{
  944. PptId: pptId,
  945. GrantType: grantType,
  946. AdminIdStr: adminIdStr,
  947. }
  948. br.Msg = "分配成功"
  949. }
  950. // ToReport
  951. // @Title 英文PPT转报告
  952. // @Description PPT转报告
  953. // @Param request body ppt_english.EnglishPPT2ReportReq true "type json string"
  954. // @Success 200 Ret=200 转换成功
  955. // @router /toReport [post]
  956. func (this *PptEnglishController) ToReport() {
  957. br := new(models.BaseResponse).Init()
  958. defer func() {
  959. this.Data["json"] = br
  960. this.ServeJSON()
  961. }()
  962. sysUser := this.SysUser
  963. if sysUser == nil {
  964. br.Msg = "请登录"
  965. br.ErrMsg = "请登录,SysUser Is Empty"
  966. br.Ret = 408
  967. return
  968. }
  969. var req ppt_english.EnglishPPT2ReportReq
  970. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  971. if err != nil {
  972. br.Msg = "参数解析异常!"
  973. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  974. return
  975. }
  976. if req.PptId == 0 {
  977. br.Msg = "参数有误"
  978. return
  979. }
  980. reportId, reportCode, msg, e := services.SaveEnglishPPTReport(req.PptId, req.ClassifyIdFirst, req.ClassifyIdSecond, req.Title, req.Abstract, sysUser)
  981. if e != nil {
  982. br.Msg = msg
  983. br.ErrMsg = "PPT转报告失败, Err: " + e.Error()
  984. return
  985. }
  986. resp := &models.PPT2ReportResp{
  987. ReportId: reportId,
  988. ReportCode: reportCode,
  989. }
  990. br.Ret = 200
  991. br.Success = true
  992. br.Msg = "转换成功"
  993. br.IsAddLog = true
  994. br.Data = resp
  995. }
  996. // TitleCheck
  997. // @Title 校验标题是否重复
  998. // @Description 校验标题是否重复接口
  999. // @Param Title query int true "标题"
  1000. // @Success 200 Ret=200 编辑成功
  1001. // @router /titleCheck [get]
  1002. func (this *PptEnglishController) TitleCheck() {
  1003. br := new(models.BaseResponse).Init()
  1004. defer func() {
  1005. this.Data["json"] = br
  1006. this.ServeJSON()
  1007. }()
  1008. title := this.GetString("Title")
  1009. pptId, _ := this.GetInt("PptId")
  1010. if title == "" {
  1011. br.Msg = "标题不能为空"
  1012. return
  1013. }
  1014. item, err := ppt_english.GetPptEnglishByTitleAndId(title, this.SysUser.AdminId)
  1015. if err != nil && err.Error() != utils.ErrNoRow() {
  1016. br.Msg = "获取数据异常!"
  1017. br.ErrMsg = "获取数据异常,Err:" + err.Error()
  1018. return
  1019. }
  1020. if item != nil && item.PptId != pptId {
  1021. br.Msg = "标题已存在,不可重复添加"
  1022. br.IsSendEmail = false
  1023. return
  1024. }
  1025. br.Ret = 200
  1026. br.Success = true
  1027. br.Msg = "校验成功"
  1028. }
  1029. // Editing
  1030. // @Title 标记/查询编辑状态
  1031. // @Description 标记/查询编辑状态
  1032. // @Param request body models.PPTEditingReq true "type json string"
  1033. // @Success 200 Ret=200 操作成功
  1034. // @router /editing [post]
  1035. func (this *PptEnglishController) Editing() {
  1036. br := new(models.BaseResponse).Init()
  1037. defer func() {
  1038. if br.ErrMsg == "" {
  1039. br.IsSendEmail = false
  1040. }
  1041. this.Data["json"] = br
  1042. this.ServeJSON()
  1043. }()
  1044. sysUser := this.SysUser
  1045. if sysUser == nil {
  1046. br.Msg = "请登录"
  1047. br.ErrMsg = "请登录,SysUser Is Empty"
  1048. br.Ret = 408
  1049. return
  1050. }
  1051. var req models.PPTEditingReq
  1052. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1053. if err != nil {
  1054. br.Msg = "参数解析异常!"
  1055. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1056. return
  1057. }
  1058. if req.PptId <= 0 {
  1059. br.Msg = "参数有误"
  1060. return
  1061. }
  1062. if req.Status < 0 {
  1063. br.Msg = "标记状态异常"
  1064. return
  1065. }
  1066. editor, e := services.UpdatePptEditing(req.PptId, req.Status, sysUser.AdminId, sysUser.RealName, true)
  1067. if e != nil {
  1068. br.Msg = "操作失败"
  1069. br.ErrMsg = "更新编辑状态失败, err: " + e.Error()
  1070. return
  1071. }
  1072. br.Data = editor
  1073. br.Ret = 200
  1074. br.Success = true
  1075. br.Msg = "操作成功"
  1076. }