ppt_english.go 30 KB

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