ppt_english_group.go 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531
  1. package ppt
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_api/models/ppt_english"
  6. "eta/eta_api/models/system"
  7. "eta/eta_api/services"
  8. "eta/eta_api/utils"
  9. "fmt"
  10. "github.com/shopspring/decimal"
  11. "sort"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // AddEnglishGroup 新增ppt目录
  17. func AddEnglishGroup(groupName string, adminId int, isShare int8, isSharedAdd int8) (newId int64, err error) {
  18. item, err := ppt_english.GetPptGroupByName(groupName, adminId)
  19. if err != nil && !utils.IsErrNoRow(err) {
  20. err = errors.New("目录查询出错:" + err.Error())
  21. return
  22. }
  23. if item != nil && item.GroupId > 0 {
  24. err = errors.New("目录名称已存在,不可重复添加")
  25. return
  26. }
  27. groupInfo := &ppt_english.PptEnglishGroup{
  28. GroupName: groupName,
  29. AdminId: adminId,
  30. IsShare: isShare,
  31. IsShareAdd: isSharedAdd,
  32. }
  33. if isShare == 1 {
  34. groupInfo.ShareTime = time.Now()
  35. }
  36. newId, err = ppt_english.AddPptGroup(groupInfo)
  37. if err != nil {
  38. err = errors.New("新增失败,Err:" + err.Error())
  39. return
  40. }
  41. groupInfo.GroupSort = newId
  42. groupInfo.GroupId = newId
  43. // 更新排序标识
  44. err = groupInfo.Update([]string{"group_sort"})
  45. if err != nil {
  46. err = errors.New("更新排序失败:" + err.Error())
  47. return
  48. }
  49. return
  50. }
  51. // AddGroupPptEnglishMapping 新增ppt和目录映射关系
  52. func AddGroupPptEnglishMapping(pptId int64, groupId int64, adminId int, adminRealName string) (newId int64, err error) {
  53. _, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  54. if err != nil {
  55. if utils.IsErrNoRow(err) {
  56. err = errors.New("目录不存在")
  57. return
  58. }
  59. err = errors.New("目录查询出错:" + err.Error())
  60. return
  61. }
  62. // 获取当前目录下最大的排序
  63. pptSort, err := ppt_english.GetMaxSortByEnglishGroupId(groupId)
  64. if err != nil {
  65. err = errors.New("查询最大排序出错:" + err.Error())
  66. return
  67. }
  68. newSort, _ := decimal.NewFromFloat(pptSort).Add(decimal.NewFromInt(1)).Float64()
  69. bindInfo := &ppt_english.PptEnglishGroupMapping{
  70. GroupId: groupId,
  71. PptId: pptId,
  72. AdminId: adminId,
  73. AdminRealName: adminRealName,
  74. PptSort: newSort,
  75. }
  76. newId, err = ppt_english.AddPptGroupMapping(bindInfo)
  77. if err != nil {
  78. err = errors.New("绑定目录失败:" + err.Error())
  79. return
  80. }
  81. //bindInfo.GroupPptId = newId
  82. //bindInfo.PptSort = newId
  83. //err = bindInfo.Update([]string{"ppt_sort"})
  84. //if err != nil {
  85. // err = errors.New("更新排序失败:" + err.Error())
  86. // return
  87. //}
  88. return
  89. }
  90. // DelEnglishGroup 删除ppt 目录
  91. func DelEnglishGroup(groupId int64, adminId int) (err error) {
  92. _, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  93. if err != nil {
  94. if utils.IsErrNoRow(err) {
  95. err = errors.New("目录不存在")
  96. return
  97. }
  98. err = errors.New("目录查询出错:" + err.Error())
  99. return
  100. }
  101. //查询是否有映射存在
  102. count, err := ppt_english.GetPptMappingCountByGroupId(groupId)
  103. if err != nil {
  104. err = errors.New("查询目录里的ppt个数出错:" + err.Error())
  105. return
  106. }
  107. if count > 0 {
  108. err = errors.New("该目录下有关联PPT,不允许删除")
  109. return
  110. }
  111. err = ppt_english.DeletePptGroup(groupId)
  112. if err != nil {
  113. err = errors.New("删除失败:" + err.Error())
  114. return
  115. }
  116. return
  117. }
  118. // ShareEnglishGroup 共享/取消共享目录
  119. func ShareEnglishGroup(groupId int64, adminId int) (respShare ppt_english.RespPptGroupShare, err error) {
  120. // 查询目录是否存在
  121. groupInfo, err := ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  122. if err != nil {
  123. if utils.IsErrNoRow(err) {
  124. err = errors.New("目录不存在")
  125. return
  126. }
  127. err = errors.New("目录查询出错:" + err.Error())
  128. return
  129. }
  130. // 判断是共享操作还是取消共享操作
  131. if groupInfo.IsShare == 1 {
  132. //取消共享
  133. groupInfo.IsShare = 0
  134. //groupInfo.ModifyTime = time.Now()
  135. err = groupInfo.Update([]string{"is_share"})
  136. if err != nil {
  137. err = errors.New("取消共享出错:" + err.Error())
  138. return
  139. }
  140. } else {
  141. //设置共享
  142. groupInfo.IsShare = 1
  143. groupInfo.ShareTime = time.Now()
  144. err = groupInfo.Update([]string{"is_share", "share_time"})
  145. if err != nil {
  146. err = errors.New("设置共享出错:" + err.Error())
  147. return
  148. }
  149. respShare.IsShare = 1
  150. }
  151. respShare.GroupId = groupId
  152. return
  153. }
  154. // CopyEnglishGroup 复制目录
  155. func CopyEnglishGroup(groupId int64, adminId int, adminRealName string) (err error) {
  156. //查询目录是否存在
  157. groupInfo, err := ppt_english.GetPptGroupByGroupId(groupId)
  158. if err != nil {
  159. if utils.IsErrNoRow(err) {
  160. err = errors.New("目录不存在")
  161. return
  162. }
  163. err = errors.New("目录查询出错:" + err.Error())
  164. return
  165. }
  166. //新增公共目录。目录名称在原来的基础上带上复制序号
  167. groupNames, err := ppt_english.GetPptGroupNamesByAdminId(adminId)
  168. if err != nil {
  169. err = errors.New("目录查询出错:" + err.Error())
  170. return
  171. }
  172. newGroupName := generateCopyName(groupInfo.GroupName, 1, groupNames)
  173. newGroupId, err := AddEnglishGroup(newGroupName, adminId, 0, 0)
  174. if err != nil {
  175. err = errors.New("复制目录出错:" + err.Error())
  176. return
  177. }
  178. //查询该目录下面是否存在ppt,如果存在则批量复制ppt到新目录下
  179. mappingList, err := ppt_english.GetPptMappingListByGroupId(groupId)
  180. if err != nil {
  181. err = errors.New("查询目录里的ppt列表出错:" + err.Error())
  182. return
  183. }
  184. if len(mappingList) <= 0 {
  185. return
  186. }
  187. pptIds := make([]int, 0)
  188. for _, v := range mappingList {
  189. pptIds = append(pptIds, int(v.PptId))
  190. }
  191. //批量查询ppt详情
  192. pptList, err := ppt_english.GetPptEnglishByIds(pptIds)
  193. if err != nil {
  194. err = errors.New("查询ppt列表出错:" + err.Error())
  195. return
  196. }
  197. pptNames, err := ppt_english.GetAllPptTitle()
  198. if err != nil {
  199. err = errors.New("查询ppt标题出错:" + err.Error())
  200. return
  201. }
  202. //批量复制ppt,更新作者为当前账号,并返回新的pptID
  203. newPptList := make([]*ppt_english.PptEnglish, 0)
  204. for _, v := range pptList {
  205. tmp := &ppt_english.PptEnglish{
  206. TemplateType: v.TemplateType,
  207. BackgroundImg: v.BackgroundImg,
  208. Title: generateCopyName(v.Title, 1, pptNames),
  209. ReportType: v.ReportType,
  210. PptDate: v.PptDate,
  211. Content: v.Content,
  212. CoverContent: v.CoverContent,
  213. CreateTime: time.Now(),
  214. ModifyTime: time.Now(),
  215. AdminId: adminId,
  216. AdminRealName: adminRealName,
  217. TitleSetting: v.TitleSetting,
  218. }
  219. newPptList = append(newPptList, tmp)
  220. }
  221. if len(newPptList) > 0 {
  222. err = ppt_english.AddPptEnglishMulti(newPptList)
  223. if err != nil {
  224. err = errors.New("复制目录里的ppt出错:" + err.Error())
  225. return
  226. }
  227. newMappings := make([]*ppt_english.PptEnglishGroupMapping, 0)
  228. for k, v := range newPptList {
  229. tmp := &ppt_english.PptEnglishGroupMapping{
  230. GroupId: newGroupId,
  231. PptId: int64(v.PptId),
  232. CreateTime: time.Now(),
  233. ModifyTime: time.Now(),
  234. PptSort: float64(k + 1),
  235. AdminId: adminId,
  236. AdminRealName: adminRealName,
  237. }
  238. newMappings = append(newMappings, tmp)
  239. }
  240. err = ppt_english.AddPptGroupMappingMulti(newMappings)
  241. if err != nil {
  242. err = errors.New("复制目录里的ppt出错:" + err.Error())
  243. return
  244. }
  245. //批量更新排序字段
  246. //var newGroupPptIds []int64
  247. //for _, v := range newMappings {
  248. // newGroupPptIds = append(newGroupPptIds, v.GroupPptId)
  249. //}
  250. //err = ppt_english.UpdatePptGroupMappingSortMulti(newGroupPptIds)
  251. //if err != nil {
  252. // err = errors.New("更新排序标识出错:" + err.Error())
  253. // return
  254. //}
  255. }
  256. return
  257. }
  258. // RenameEnglishGroupName 目录重命名
  259. func RenameEnglishGroupName(groupId int64, groupName string, adminId int) (err error) {
  260. groupInfo, err := ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  261. if err != nil {
  262. if utils.IsErrNoRow(err) {
  263. err = errors.New("目录不存在")
  264. return
  265. }
  266. err = errors.New("目录查询出错:" + err.Error())
  267. return
  268. }
  269. if groupInfo.GroupName == groupName {
  270. err = errors.New("与原名字一致,无需修改")
  271. return
  272. }
  273. item, err := ppt_english.GetPptGroupByName(groupName, adminId)
  274. if err != nil && !utils.IsErrNoRow(err) {
  275. err = errors.New("目录查询出错:" + err.Error())
  276. return
  277. }
  278. if item != nil && item.GroupId > 0 {
  279. err = errors.New("目录名称已存在,不可重复添加")
  280. return
  281. }
  282. //更新新名字
  283. groupInfo.GroupName = groupName
  284. err = groupInfo.Update([]string{"group_name"})
  285. if err != nil {
  286. err = errors.New("目录重命名失败" + err.Error())
  287. return
  288. }
  289. return
  290. }
  291. // GetGroupPptEnglishList 公共目录下的ppt列表或者单个目录里的ppt列表
  292. func GetGroupPptEnglishList(groupId int64, adminId int) (ret ppt_english.RespGroupPptList, err error) {
  293. var groupPptList []*ppt_english.PptEnglishGroupMapping
  294. var groups []*ppt_english.PptEnglishGroup
  295. list := make([]*ppt_english.RespGroupPptListItem, 0)
  296. ret.List = list
  297. if groupId > 0 {
  298. //只查询组内的ppt列表
  299. //查询目录是否存在
  300. groupInfo, tErr := ppt_english.GetPptGroupByGroupId(groupId)
  301. if tErr != nil {
  302. if utils.IsErrNoRow(tErr) {
  303. err = errors.New("目录不存在")
  304. return
  305. }
  306. err = errors.New("目录查询出错:" + tErr.Error())
  307. return
  308. }
  309. groups = append(groups, groupInfo)
  310. groupPptList, tErr = ppt_english.GetPptMappingListByGroupIdDesc(groupId)
  311. if tErr != nil {
  312. err = errors.New("目录里的ppt查询出错:" + tErr.Error())
  313. return
  314. }
  315. } else {
  316. // 获取我的所有的ppt
  317. ret, err = GetMyPptEnglishList(adminId, ``)
  318. return
  319. }
  320. if len(groupPptList) <= 0 {
  321. return
  322. }
  323. pptMap := make(map[int]*ppt_english.PptEnglish)
  324. groupMap := make(map[int64][]*ppt_english.PptEnglishGroupMapping)
  325. pptIds := make([]int, 0)
  326. for _, v := range groupPptList {
  327. pptIds = append(pptIds, int(v.PptId))
  328. groupMap[v.GroupId] = append(groupMap[v.GroupId], v)
  329. }
  330. if len(pptIds) == 0 {
  331. // 返回所有空目录
  332. return
  333. }
  334. pptList, err := ppt_english.GetPptEnglishByIds(pptIds)
  335. if err != nil {
  336. err = errors.New("查询ppt详情出错:" + err.Error())
  337. return
  338. }
  339. for _, v := range pptList {
  340. // 解决部分历史ppt数据不存在TotalPages的情况
  341. if v.PptPage == 0 {
  342. var pptContent []services.PPTContent
  343. err = json.Unmarshal([]byte(v.Content), &pptContent)
  344. if err != nil {
  345. err = errors.New("解析ppt内容出错" + err.Error())
  346. return
  347. }
  348. v.PptPage = len(pptContent)
  349. }
  350. pptMap[v.PptId] = v
  351. }
  352. //按照排序顺序,依次放入ppt
  353. hasPpt := make(map[int]struct{})
  354. for _, v := range groups {
  355. if mapList, ok := groupMap[v.GroupId]; ok {
  356. if len(mapList) > 0 {
  357. for _, pptV := range mapList {
  358. pptInfo, ok1 := pptMap[int(pptV.PptId)]
  359. _, ok2 := hasPpt[int(pptV.PptId)]
  360. if ok1 && !ok2 {
  361. tmp := &ppt_english.RespGroupPptListItem{
  362. GroupPptId: pptV.GroupPptId,
  363. PptId: pptV.PptId,
  364. TemplateType: pptInfo.TemplateType,
  365. BackgroundImg: pptInfo.BackgroundImg,
  366. Title: pptInfo.Title,
  367. AdminId: pptV.AdminId,
  368. AdminRealName: pptV.AdminRealName,
  369. IsSingleShare: 0,
  370. PptCreateTime: pptInfo.CreateTime.Format(utils.FormatDateTime),
  371. PptModifyTime: pptInfo.ModifyTime.Format(utils.FormatDateTime),
  372. PptxUrl: pptInfo.PptxUrl,
  373. ReportId: pptInfo.ReportId,
  374. ReportCode: pptInfo.ReportCode,
  375. PublishTime: utils.DealDateTimeZero(pptInfo.PublishTime, utils.FormatDateTime),
  376. PptPage: pptInfo.PptPage,
  377. }
  378. if pptV.ChildGroupPptId > 0 {
  379. tmp.IsSingleShare = 1
  380. }
  381. list = append(list, tmp)
  382. hasPpt[pptInfo.PptId] = struct{}{}
  383. }
  384. }
  385. }
  386. }
  387. }
  388. ret.List = list
  389. if groupId <= 0 {
  390. sort.Sort(ret)
  391. }
  392. ret.Total = len(list)
  393. return
  394. }
  395. // MoveGroupPptEnglish 移动ppt操作
  396. //func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adminId int) (err error) {
  397. // //查询当前映射是否存在
  398. // //判断当前登录者是否有共享的权限oo
  399. // groupPpt, err := ppt_english.GetPptMappingByGroupPptId(groupPptId, adminId)
  400. // if err != nil {
  401. // if utils.IsErrNoRow(err) {
  402. // err = errors.New("当前目录下的ppt不存在")
  403. // return
  404. // }
  405. // err = errors.New("目录下的ppt查询出错:" + err.Error())
  406. // return
  407. // }
  408. // var updateStr []string
  409. // //如果更换了目录,默认当前排序值为0
  410. // var currentSort, prevSort, nextSort int64
  411. // //判断是否更换group
  412. // if groupPpt.GroupId != groupId {
  413. // _, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  414. // if err != nil {
  415. // if utils.IsErrNoRow(err) {
  416. // err = errors.New("目录不存在")
  417. // return
  418. // }
  419. // err = errors.New("目录查询出错:" + err.Error())
  420. // return
  421. // }
  422. // //判断是否需要解除当个ppt共享
  423. // //解除共享操作
  424. // err = CancelShareSingleGroupPptEnglish(groupPpt, adminId)
  425. // if err != nil {
  426. // err = errors.New(err.Error())
  427. // return
  428. // }
  429. // groupPpt.GroupId = groupId
  430. // updateStr = append(updateStr, "group_id")
  431. // }
  432. // currentSort = groupPpt.PptSort
  433. //
  434. // var prevGroupPpt *ppt_english.PptEnglishGroupMapping
  435. // var nextGroupPpt *ppt_english.PptEnglishGroupMapping
  436. // if prevGroupPptId > 0 {
  437. // prevGroupPpt, err = ppt_english.GetPptMappingByGroupPptId(prevGroupPptId, adminId)
  438. // if err != nil {
  439. // if utils.IsErrNoRow(err) {
  440. // err = errors.New("目录下的ppt不存在")
  441. // return
  442. // }
  443. // err = errors.New("目录下的ppt查询出错:" + err.Error())
  444. // return
  445. // }
  446. // prevSort = prevGroupPpt.PptSort
  447. // }
  448. //
  449. // if nextGroupPptId > 0 {
  450. // nextGroupPpt, err = ppt_english.GetPptMappingByGroupPptId(nextGroupPptId, adminId)
  451. // if err != nil {
  452. // if utils.IsErrNoRow(err) {
  453. // err = errors.New("目录下的ppt不存在")
  454. // return
  455. // }
  456. // err = errors.New("目录下的ppt查询出错:" + err.Error())
  457. // return
  458. // }
  459. // nextSort = nextGroupPpt.PptSort
  460. // }
  461. //
  462. // updateStr = append(updateStr, "ppt_sort")
  463. //
  464. // //移到两个排序值中间操作
  465. // if prevSort >= currentSort {
  466. // //往下移动
  467. // err = ppt_english.MoveDownGroupPptBySort(groupId, prevSort, currentSort)
  468. // if err != nil {
  469. // err = errors.New("向下移动ppt出错:" + err.Error())
  470. // return
  471. // }
  472. // groupPpt.PptSort = prevSort
  473. // } else if nextSort <= currentSort && nextSort != 0 {
  474. // //往上移动
  475. // err = ppt_english.MoveUpGroupPptBySort(groupId, nextSort, currentSort)
  476. // if err != nil {
  477. // err = errors.New("向上移动ppt出错:" + err.Error())
  478. // return
  479. // }
  480. // groupPpt.PptSort = nextSort
  481. // }
  482. // //更新当前排序
  483. // err = groupPpt.Update(updateStr)
  484. // if err != nil {
  485. // err = errors.New("移动ppt出错:" + err.Error())
  486. // return
  487. // }
  488. // return
  489. //}
  490. // MoveGroupPptEnglish 移动ppt操作
  491. func MoveGroupPptEnglish(groupId, groupPptId, prevGroupPptId, nextGroupPptId int64, adminId int) (err error) {
  492. //查询当前映射是否存在
  493. //判断当前登录者是否有共享的权限oo
  494. groupPpt, err := ppt_english.GetPptMappingByGroupPptId(groupPptId, adminId)
  495. if err != nil {
  496. if utils.IsErrNoRow(err) {
  497. err = errors.New("当前目录下的ppt不存在")
  498. return
  499. }
  500. err = errors.New("目录下的ppt查询出错:" + err.Error())
  501. return
  502. }
  503. var updateStr []string
  504. //判断是否更换group
  505. if groupPpt.GroupId != groupId {
  506. _, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  507. if err != nil {
  508. if utils.IsErrNoRow(err) {
  509. err = errors.New("目录不存在")
  510. return
  511. }
  512. err = errors.New("目录查询出错:" + err.Error())
  513. return
  514. }
  515. //判断是否需要解除当个ppt共享
  516. //解除共享操作
  517. err = CancelShareSingleGroupPptEnglish(groupPpt, adminId)
  518. if err != nil {
  519. err = errors.New(err.Error())
  520. return
  521. }
  522. groupPpt.GroupId = groupId
  523. updateStr = append(updateStr, "group_id")
  524. }
  525. var prevGroupPpt *ppt_english.PptEnglishGroupMapping
  526. var nextGroupPpt *ppt_english.PptEnglishGroupMapping
  527. if prevGroupPptId > 0 {
  528. prevGroupPpt, err = ppt_english.GetPptMappingByGroupPptId(prevGroupPptId, adminId)
  529. if err != nil {
  530. if utils.IsErrNoRow(err) {
  531. err = errors.New("目录下的ppt不存在")
  532. return
  533. }
  534. err = errors.New("目录下的ppt查询出错:" + err.Error())
  535. return
  536. }
  537. }
  538. if nextGroupPptId > 0 {
  539. nextGroupPpt, err = ppt_english.GetPptMappingByGroupPptId(nextGroupPptId, adminId)
  540. if err != nil {
  541. if utils.IsErrNoRow(err) {
  542. err = errors.New("目录下的ppt不存在")
  543. return
  544. }
  545. err = errors.New("目录下的ppt查询出错:" + err.Error())
  546. return
  547. }
  548. }
  549. pptSort := groupPpt.PptSort
  550. if prevGroupPpt != nil && prevGroupPpt.PptId > 0 && nextGroupPpt != nil && nextGroupPpt.PptId > 0 { // 两个之间
  551. pptSort, _ = decimal.NewFromFloat(prevGroupPpt.PptSort).Add(decimal.NewFromFloat(nextGroupPpt.PptSort)).Div(decimal.NewFromInt(2)).Float64()
  552. } else if prevGroupPpt != nil && prevGroupPpt.PptId > 0 {
  553. minSort, tmpErr := ppt_english.GetMinSortByEnglishGroupId(prevGroupPpt.GroupId)
  554. if tmpErr != nil {
  555. err = errors.New("获取最小排序失败:" + tmpErr.Error())
  556. return
  557. }
  558. pptSort, _ = decimal.NewFromFloat(minSort).Add(decimal.NewFromInt(1)).Float64()
  559. } else if nextGroupPpt != nil && nextGroupPpt.PptId > 0 {
  560. maxSort, tmpErr := ppt_english.GetMaxSortByEnglishGroupId(prevGroupPpt.GroupId)
  561. if tmpErr != nil {
  562. err = errors.New("获取最小排序失败:" + tmpErr.Error())
  563. return
  564. }
  565. pptSort, _ = decimal.NewFromFloat(maxSort).Sub(decimal.NewFromInt(1)).Float64()
  566. }
  567. groupPpt.PptSort = pptSort
  568. updateStr = append(updateStr, "ppt_sort")
  569. //更新当前排序
  570. err = groupPpt.Update(updateStr)
  571. if err != nil {
  572. err = errors.New("移动ppt出错:" + err.Error())
  573. return
  574. }
  575. return
  576. }
  577. // MoveEnglishGroup 移动目录
  578. func MoveEnglishGroup(groupId, prevGroupId, nextGroupId int64, adminId int) (err error) {
  579. //查询目录是否存在
  580. groupInfo, err := ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  581. if err != nil {
  582. if utils.IsErrNoRow(err) {
  583. err = errors.New("目录不存在")
  584. return
  585. }
  586. err = errors.New("目录查询出错:" + err.Error())
  587. return
  588. }
  589. //如果更换了目录,默认当前排序值为0
  590. var currentSort, prevSort, nextSort int64
  591. currentSort = groupInfo.GroupSort
  592. var prevGroup *ppt_english.PptEnglishGroup
  593. var nextGroup *ppt_english.PptEnglishGroup
  594. if prevGroupId > 0 {
  595. prevGroup, err = ppt_english.GetPptGroupByGroupIdAdminId(prevGroupId, adminId)
  596. if err != nil {
  597. if utils.IsErrNoRow(err) {
  598. err = errors.New("目录不存在")
  599. return
  600. }
  601. err = errors.New("目录查询出错:" + err.Error())
  602. return
  603. }
  604. prevSort = prevGroup.GroupSort
  605. }
  606. if nextGroupId > 0 {
  607. nextGroup, err = ppt_english.GetPptGroupByGroupIdAdminId(nextGroupId, adminId)
  608. if err != nil {
  609. if utils.IsErrNoRow(err) {
  610. err = errors.New("目录不存在")
  611. return
  612. }
  613. err = errors.New("目录查询出错:" + err.Error())
  614. return
  615. }
  616. nextSort = nextGroup.GroupSort
  617. }
  618. //移到两个排序值中间操作
  619. if prevSort >= currentSort {
  620. //往下移动
  621. err = ppt_english.MoveDownGroupBySort(prevSort, currentSort)
  622. if err != nil {
  623. err = errors.New("向下移动ppt出错:" + err.Error())
  624. return
  625. }
  626. groupInfo.GroupSort = prevSort
  627. } else if nextSort <= currentSort && nextSort != 0 {
  628. //往上移动
  629. err = ppt_english.MoveUpGroupBySort(nextSort, currentSort)
  630. if err != nil {
  631. err = errors.New("向上移动ppt出错:" + err.Error())
  632. return
  633. }
  634. groupInfo.GroupSort = nextSort
  635. }
  636. //更新当前排序
  637. err = groupInfo.Update([]string{"group_sort"})
  638. if err != nil {
  639. err = errors.New("移动目录出错:" + err.Error())
  640. return
  641. }
  642. return
  643. }
  644. // CancelShareSingleGroupPptEnglish 解除单个共享的ppt
  645. func CancelShareSingleGroupPptEnglish(groupPpt *ppt_english.PptEnglishGroupMapping, adminId int) (err error) {
  646. if groupPpt.ChildGroupPptId <= 0 {
  647. return
  648. }
  649. //如果已经是共享状态,
  650. //判断当前登录者是否有取消共享的权限
  651. childGroupPpt, tErr := ppt_english.GetPptMappingByGroupPptId(groupPpt.ChildGroupPptId, adminId)
  652. if tErr != nil {
  653. if !utils.IsErrNoRow(tErr) {
  654. err = errors.New("目录下的ppt查询出错:" + tErr.Error())
  655. return
  656. }
  657. }
  658. if childGroupPpt != nil {
  659. //删除共享目录和ppt的映射关系
  660. err = ppt_english.DeletePptGroupMapping(childGroupPpt.GroupPptId, adminId)
  661. if err != nil {
  662. err = errors.New("删除共享目录下的ppt失败:" + err.Error())
  663. return
  664. }
  665. //删除共享出去的公共目录
  666. err = ppt_english.DeletePptGroup(childGroupPpt.GroupId)
  667. if err != nil {
  668. err = errors.New("删除共享目录失败:" + err.Error())
  669. return
  670. }
  671. }
  672. //更新共享状态为未共享,
  673. //更新共享标识
  674. groupPpt.ChildGroupPptId = 0
  675. err = groupPpt.Update([]string{"child_group_ppt_id"})
  676. if err != nil {
  677. err = errors.New("更新共享标识失败" + err.Error())
  678. return
  679. }
  680. return
  681. }
  682. // DeleteGroupPptEnglish 删除ppt
  683. func DeleteGroupPptEnglish(PptId int) (err error) {
  684. //查询该ppt的所有单个共享出去的目录信息
  685. groupPpts, err := ppt_english.GetGroupPptByPptId(PptId)
  686. if err != nil {
  687. err = errors.New("查询目录里的ppt失败" + err.Error())
  688. return
  689. }
  690. if len(groupPpts) <= 0 {
  691. return
  692. }
  693. //整理出需要删除的groupId
  694. groupPptMap := make(map[int64]*ppt_english.PptEnglishGroupMapping)
  695. for _, v := range groupPpts {
  696. groupPptMap[v.GroupPptId] = v
  697. }
  698. var delGroupIds string
  699. for _, v := range groupPpts {
  700. if v.ChildGroupPptId > 0 {
  701. if childGroup, ok := groupPptMap[v.ChildGroupPptId]; ok {
  702. delGroupIds += strconv.Itoa(int(childGroup.GroupId)) + ","
  703. }
  704. }
  705. }
  706. if delGroupIds != "" {
  707. delGroupIds = "(" + strings.Trim(delGroupIds, ",") + ")"
  708. err = ppt_english.DeletePptGroupByGroupIds(delGroupIds)
  709. if err != nil {
  710. err = errors.New("删除单个共享目录失败" + err.Error())
  711. return
  712. }
  713. }
  714. //再统一删除目录里相关的ppt
  715. err = ppt_english.DeletePptGroupMappingByPptId(PptId)
  716. if err != nil {
  717. err = errors.New("删除目录里的ppt失败" + err.Error())
  718. return
  719. }
  720. return
  721. }
  722. // CopyPptEnglish 复制单个ppt,并移动到新的目录下面
  723. func CopyPptEnglish(pptId int, groupId int64, adminId int, adminRealName string) (resp ppt_english.RespGroupPptNameListItem, err error) {
  724. //查询ppt详情
  725. pptInfo, err := ppt_english.GetPptEnglishById(pptId)
  726. if err != nil {
  727. if utils.IsErrNoRow(err) {
  728. err = errors.New("ppt 不存在")
  729. return
  730. }
  731. err = errors.New("查询ppt失败" + err.Error())
  732. return
  733. }
  734. // 查询目录是否存在
  735. _, err = ppt_english.GetPptGroupByGroupIdAdminId(groupId, adminId)
  736. if err != nil {
  737. if utils.IsErrNoRow(err) {
  738. err = errors.New("目录不存在")
  739. return
  740. }
  741. err = errors.New("目录查询出错:" + err.Error())
  742. return
  743. }
  744. pptNames, err := ppt_english.GetAllPptTitle()
  745. if err != nil {
  746. err = errors.New("查询ppt标题出错:" + err.Error())
  747. return
  748. }
  749. //复制ppt,更新作者为当前账号,并返回新的pptID
  750. var newPptList []*ppt_english.PptEnglish
  751. newPpt := &ppt_english.PptEnglish{
  752. TemplateType: pptInfo.TemplateType,
  753. BackgroundImg: pptInfo.BackgroundImg,
  754. Title: generateCopyName(pptInfo.Title, 1, pptNames),
  755. ReportType: pptInfo.ReportType,
  756. PptDate: pptInfo.PptDate,
  757. Content: pptInfo.Content,
  758. CoverContent: pptInfo.CoverContent,
  759. CreateTime: time.Now(),
  760. ModifyTime: time.Now(),
  761. AdminId: adminId,
  762. AdminRealName: adminRealName,
  763. TitleSetting: pptInfo.TitleSetting,
  764. }
  765. newPptList = append(newPptList, newPpt)
  766. err = ppt_english.AddPptEnglishMulti(newPptList)
  767. if err != nil {
  768. err = errors.New("复制目录里的ppt出错:" + err.Error())
  769. return
  770. }
  771. // 获取当前目录下最大的排序
  772. pptSort, err := ppt_english.GetMaxSortByEnglishGroupId(groupId)
  773. if err != nil {
  774. err = errors.New("查询最大排序出错:" + err.Error())
  775. return
  776. }
  777. newSort, _ := decimal.NewFromFloat(pptSort).Add(decimal.NewFromInt(1)).Float64()
  778. var newMappings []*ppt_english.PptEnglishGroupMapping
  779. newGroupPpt := &ppt_english.PptEnglishGroupMapping{
  780. GroupId: groupId,
  781. PptId: int64(newPpt.PptId),
  782. CreateTime: time.Now(),
  783. ModifyTime: time.Now(),
  784. AdminId: adminId,
  785. AdminRealName: adminRealName,
  786. PptSort: newSort,
  787. }
  788. newMappings = append(newMappings, newGroupPpt)
  789. err = ppt_english.AddPptGroupMappingMulti(newMappings)
  790. if err != nil {
  791. err = errors.New("复制目录里的ppt出错:" + err.Error())
  792. return
  793. }
  794. ////批量更新排序字段
  795. //err = ppt_english.UpdatePptGroupMappingSortMulti([]int64{newGroupPpt.GroupPptId})
  796. //if err != nil {
  797. // err = errors.New("更新排序标识出错:" + err.Error())
  798. // return
  799. //}
  800. var pptPage int
  801. if newPpt.Content != "" {
  802. contents := make([]PageContent, 0)
  803. if e := json.Unmarshal([]byte(newPpt.Content), &contents); e != nil {
  804. err = errors.New(fmt.Sprintf("%d,解析PPT内容页数失败: %s", newPpt.PptId, e.Error()))
  805. return
  806. }
  807. pptPage = len(contents)
  808. }
  809. resp = ppt_english.RespGroupPptNameListItem{
  810. GroupPptId: newGroupPpt.GroupPptId,
  811. PptId: int64(newPpt.PptId),
  812. Title: newPpt.Title,
  813. AdminId: newPpt.AdminId,
  814. AdminRealName: newPpt.AdminRealName,
  815. PptCreateTime: newPpt.CreateTime.Format(utils.FormatDateTime),
  816. PptPage: pptPage,
  817. TitleSetting: newPpt.TitleSetting,
  818. }
  819. return
  820. }
  821. // generateCopyNameEnglish 生成复制的目录名称
  822. func generateCopyNameEnglish(originName string, count int, nameList []string) (newName string) {
  823. newName = originName + "(" + strconv.Itoa(count) + ")"
  824. for _, v := range nameList {
  825. if v == newName {
  826. count++
  827. newName = generateCopyName(originName, count, nameList)
  828. return
  829. }
  830. }
  831. return
  832. }
  833. // SearchGroupPptEnglish 根据ppt标题搜索ppt
  834. func SearchGroupPptEnglish(keyWord string) (ret ppt_english.RespSearchGroupPptList, err error) {
  835. //组装group ppt
  836. list := make([]*ppt_english.RespSearchGroupPptListItem, 0)
  837. ret.List = list
  838. condition := " and title like ? "
  839. var pars []interface{}
  840. pars = append(pars, utils.GetLikeKeyword(keyWord))
  841. pptList, err := ppt_english.GetPptEnglishByCondition(condition, pars)
  842. if err != nil {
  843. err = errors.New("查询ppt列表出错:" + err.Error())
  844. return
  845. }
  846. if len(pptList) == 0 {
  847. return
  848. }
  849. pptIds := make([]string, 0)
  850. pptMap := make(map[int]*ppt_english.PptEnglish)
  851. for _, v := range pptList {
  852. pptIds = append(pptIds, strconv.Itoa(v.PptId))
  853. pptMap[v.PptId] = v
  854. }
  855. groupPptList, err := ppt_english.GetPublicGroupPptByPptIds(pptIds)
  856. if err != nil {
  857. err = errors.New("查询目录里的ppt列表出错:" + err.Error())
  858. return
  859. }
  860. for _, v := range groupPptList {
  861. tmp := new(ppt_english.RespSearchGroupPptListItem)
  862. tmp.GroupPptId = v.GroupPptId
  863. tmp.PptId = v.PptId
  864. if i, ok := pptMap[int(v.PptId)]; ok {
  865. tmp.Title = i.Title
  866. }
  867. list = append(list, tmp)
  868. }
  869. ret.List = list
  870. return
  871. }
  872. func GetEnglishGroupsByAdminId(adminId int) (ret ppt_english.RespGroupList, err error) {
  873. myPptList := make([]*ppt_english.RespGroupPptNameListItem, 0)
  874. otherPptList := make([]*ppt_english.RespGroupPptNameListItem, 0)
  875. grantList := []ppt_english.RespGroupListItem{
  876. {
  877. GroupId: 1,
  878. GroupName: "我共享的",
  879. PptList: myPptList,
  880. },
  881. {
  882. GroupId: 2,
  883. GroupName: "收到共享",
  884. PptList: otherPptList,
  885. },
  886. }
  887. ret.PublicList = make([]*ppt_english.RespGroupListItem, 0)
  888. ret.PrivateList = make([]*ppt_english.RespGroupListItem, 0)
  889. ret.GrantList = grantList
  890. pptMap := make(map[int]*ppt_english.PptEnglish)
  891. groupMap := make(map[int64][]*ppt_english.RespGroupPptNameListItem)
  892. groupHasNewPptMap := make(map[int64]struct{})
  893. pptIds := make([]int, 0)
  894. // 获取我的ppt分组
  895. privateGroups, err := ppt_english.GetPrivatePptGroupsByAdminId(adminId)
  896. if err != nil {
  897. err = errors.New("私有目录查询出错:" + err.Error())
  898. return
  899. }
  900. groupIds := make([]int64, 0)
  901. for _, v := range privateGroups {
  902. groupIds = append(groupIds, v.GroupId)
  903. }
  904. var pptMappings []*ppt_english.PptEnglishGroupMapping
  905. // 如果没有分组,那么直接返回
  906. if len(groupIds) > 0 {
  907. // 遍历分组并拼接
  908. for _, v := range privateGroups {
  909. tmp := new(ppt_english.RespGroupListItem)
  910. tmp.GroupId = v.GroupId
  911. tmp.GroupName = v.GroupName
  912. tmp.IsShare = v.IsShare
  913. tmp.AdminId = v.AdminId
  914. ret.PrivateList = append(ret.PrivateList, tmp)
  915. }
  916. // 通过分组id获取相关的ppt信息,主要是为了获取所有的ppt_id字段
  917. pptMappings, err = ppt_english.GetPptMappingListByGroupIds(groupIds)
  918. if err != nil {
  919. err = errors.New("查询目录里的ppt出错:" + err.Error())
  920. return
  921. }
  922. for _, v := range pptMappings {
  923. pptIds = append(pptIds, int(v.PptId))
  924. }
  925. }
  926. adminIdList := make([]int, 0) //需要查询的创建人admin_id列表集合
  927. adminIdMap := make(map[int]int) //需要查询的创建人admin_id集合,用来去重的,避免重复id
  928. // grantList 已经分配权限的ppt
  929. grantPptList, err := ppt_english.GetAllGrantList(adminId)
  930. for _, v := range grantPptList {
  931. pptIds = append(pptIds, v.PptId)
  932. if _, ok := adminIdMap[v.AdminId]; !ok {
  933. adminIdList = append(adminIdList, v.AdminId) //需要查询的创建人admin_id列表集合
  934. adminIdMap[v.AdminId] = v.AdminId //需要查询的创建人admin_id集合,用来去重的,避免重复id
  935. }
  936. }
  937. if len(pptIds) > 0 {
  938. // 通过ppt_id列表字段获取所有的ppt信息
  939. pptList, tmpErr := ppt_english.GetPptEnglishByIds(pptIds)
  940. if tmpErr != nil {
  941. err = errors.New("查询ppt详情出错:" + err.Error())
  942. return
  943. }
  944. for _, v := range pptList {
  945. pptMap[v.PptId] = v
  946. }
  947. }
  948. // 私有的Ppt列表
  949. {
  950. //组装group ppt
  951. for _, v := range pptMappings {
  952. i, ok := pptMap[int(v.PptId)]
  953. if !ok { //找不到ppt,还干个啥,直接退出当前循环啊
  954. continue
  955. }
  956. pptPage := 0
  957. // 因之前并没有存储PPT页数字段,所以此处读取PPT内容的长度
  958. if i.Content != "" {
  959. contents := make([]PageContent, 0)
  960. if e := json.Unmarshal([]byte(i.Content), &contents); e != nil {
  961. err = errors.New(fmt.Sprintf("%d,解析PPT内容页数失败: %s", i.PptId, e.Error()))
  962. return
  963. }
  964. pptPage = len(contents)
  965. }
  966. tmp := &ppt_english.RespGroupPptNameListItem{
  967. AdminId: v.AdminId,
  968. GroupPptId: v.GroupPptId,
  969. PptId: v.PptId,
  970. AdminRealName: v.AdminRealName,
  971. Title: i.Title,
  972. IsSingleShare: i.IsShare,
  973. PptxUrl: i.PptxUrl,
  974. ReportId: i.ReportId,
  975. ReportCode: i.ReportCode,
  976. PptCreateTime: i.CreateTime.Format(utils.FormatDateTime),
  977. PptModifyTime: i.ModifyTime.Format(utils.FormatDateTime),
  978. PublishTime: utils.DealDateTimeZero(i.PublishTime, utils.FormatDateTime),
  979. PptPage: pptPage,
  980. }
  981. if tmp.PptVersion == 2 {
  982. groupHasNewPptMap[v.GroupId] = struct{}{}
  983. }
  984. groupMap[v.GroupId] = append(groupMap[v.GroupId], tmp)
  985. }
  986. for k, v := range ret.PrivateList {
  987. if pptL, ok := groupMap[v.GroupId]; ok {
  988. ret.PrivateList[k].PptList = pptL
  989. if _, ok1 := groupHasNewPptMap[v.GroupId]; !ok1 && len(pptL) > 0 {
  990. ret.PrivateList[k].OnlyOld = true
  991. }
  992. }
  993. }
  994. }
  995. publicAdminIdList := make([]int, 0)
  996. publicPptListMap := make(map[int][]*ppt_english.RespGroupPptNameListItem)
  997. // 获取公开分享的ppt
  998. sharePptList, err := ppt_english.GetSharePptEnglish()
  999. for _, v := range sharePptList {
  1000. publicPptList, ok := publicPptListMap[v.AdminId]
  1001. if !ok {
  1002. publicPptList = make([]*ppt_english.RespGroupPptNameListItem, 0)
  1003. publicAdminIdList = append(publicAdminIdList, v.AdminId)
  1004. // 需要查询的创建人信息
  1005. if _, ok := adminIdMap[v.AdminId]; !ok {
  1006. adminIdList = append(adminIdList, v.AdminId) //需要查询的创建人admin_id列表集合
  1007. adminIdMap[v.AdminId] = v.AdminId //需要查询的创建人admin_id集合,用来去重的,避免重复id
  1008. }
  1009. }
  1010. contents := make([]PageContent, 0)
  1011. if e := json.Unmarshal([]byte(v.Content), &contents); e != nil {
  1012. err = errors.New("解析PPT内容页数失败: " + e.Error())
  1013. return
  1014. }
  1015. pptPage := len(contents)
  1016. tmpV := &ppt_english.RespGroupPptNameListItem{
  1017. GroupPptId: int64(v.PptId),
  1018. PptId: int64(v.PptId),
  1019. Title: v.Title,
  1020. AdminId: v.AdminId,
  1021. AdminRealName: v.AdminRealName,
  1022. IsSingleShare: v.IsShare,
  1023. PptxUrl: v.PptxUrl,
  1024. ReportId: v.ReportId,
  1025. ReportCode: v.ReportCode,
  1026. PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
  1027. PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  1028. PublishTime: utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
  1029. PptPage: pptPage,
  1030. }
  1031. publicPptList = append(publicPptList, tmpV)
  1032. publicPptListMap[v.AdminId] = publicPptList
  1033. }
  1034. // 创建人信息
  1035. systemAdminMap := make(map[int]*system.Admin)
  1036. systemAdminList, err := system.GetAdminListByIdList(adminIdList)
  1037. if err != nil {
  1038. return
  1039. }
  1040. for _, v := range systemAdminList {
  1041. systemAdminMap[v.AdminId] = v
  1042. }
  1043. // 公开分享的用户列表
  1044. {
  1045. for _, v := range publicAdminIdList {
  1046. systemAdmin, ok := systemAdminMap[v]
  1047. if !ok {
  1048. continue
  1049. }
  1050. // ppt 列表信息
  1051. respGroupPptNameListItemList, ok := publicPptListMap[v]
  1052. if !ok {
  1053. respGroupPptNameListItemList = make([]*ppt_english.RespGroupPptNameListItem, 0)
  1054. }
  1055. // ppt 分组信息
  1056. tmpRespGroupListItem := &ppt_english.RespGroupListItem{
  1057. GroupId: int64(systemAdmin.AdminId),
  1058. GroupName: systemAdmin.RealName + "的PPT",
  1059. AdminId: systemAdmin.AdminId,
  1060. IsShare: 1,
  1061. OnlyOld: false,
  1062. PptList: respGroupPptNameListItemList,
  1063. }
  1064. ret.PublicList = append(ret.PublicList, tmpRespGroupListItem)
  1065. }
  1066. }
  1067. myGrantPPtIdMap := make(map[int]int) //我分配的ppt的id集合
  1068. // 共享Ppt
  1069. {
  1070. for _, v := range grantPptList {
  1071. pptPage := 0
  1072. // 因之前并没有存储PPT页数字段,所以此处读取PPT内容的长度
  1073. if v.Content != "" {
  1074. contents := make([]PageContent, 0)
  1075. if e := json.Unmarshal([]byte(v.Content), &contents); e != nil {
  1076. err = errors.New("解析PPT内容页数失败: " + e.Error())
  1077. return
  1078. }
  1079. }
  1080. title := v.Title
  1081. if adminInfo, ok := systemAdminMap[v.AdminId]; ok {
  1082. title = adminInfo.RealName + "———" + title
  1083. }
  1084. tmp := &ppt_english.RespGroupPptNameListItem{
  1085. AdminId: v.AdminId,
  1086. //GroupPptId: v.GroupPptId,
  1087. PptId: int64(v.PptId),
  1088. AdminRealName: v.AdminRealName,
  1089. Title: title,
  1090. PptVersion: v.PptVersion,
  1091. IsSingleShare: v.IsShare,
  1092. PptxUrl: v.PptxUrl,
  1093. ReportId: v.ReportId,
  1094. ReportCode: v.ReportCode,
  1095. PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
  1096. PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  1097. PublishTime: utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
  1098. PptPage: pptPage,
  1099. }
  1100. if v.AdminId == adminId {
  1101. tmp.IsGrant = 1
  1102. myPptList = append(myPptList, tmp)
  1103. myGrantPPtIdMap[v.PptId] = v.PptId
  1104. } else {
  1105. tmp.IsReceived = 1
  1106. otherPptList = append(otherPptList, tmp)
  1107. }
  1108. }
  1109. grantList[0].PptList = myPptList
  1110. grantList[1].PptList = otherPptList
  1111. ret.GrantList = grantList
  1112. }
  1113. // 处理公共ppt里面的关于自个的ppt是否有配置权限的字段数据变更
  1114. for k, publicList := range ret.PublicList {
  1115. for kk, pptInfo := range publicList.PptList {
  1116. // 是否有过权限配置
  1117. if _, ok := myGrantPPtIdMap[int(pptInfo.PptId)]; ok {
  1118. pptInfo.IsGrant = 1
  1119. }
  1120. publicList.PptList[kk] = pptInfo
  1121. }
  1122. ret.PublicList[k] = publicList
  1123. }
  1124. for k, privateList := range ret.PrivateList {
  1125. for kk, pptInfo := range privateList.PptList {
  1126. // 是否有过权限配置
  1127. if _, ok := myGrantPPtIdMap[int(pptInfo.PptId)]; ok {
  1128. pptInfo.IsGrant = 1
  1129. }
  1130. privateList.PptList[kk] = pptInfo
  1131. }
  1132. ret.PrivateList[k] = privateList
  1133. }
  1134. return
  1135. //则过滤空文件夹
  1136. //公共ppt
  1137. pubList := make([]*ppt_english.RespGroupListItem, 0)
  1138. for _, v := range ret.PublicList {
  1139. if len(v.PptList) > 0 {
  1140. pubList = append(pubList, v)
  1141. }
  1142. }
  1143. ret.PublicList = pubList
  1144. // 私有ppt
  1145. priList := make([]*ppt_english.RespGroupListItem, 0)
  1146. for _, v := range ret.PrivateList {
  1147. if len(v.PptList) > 0 {
  1148. priList = append(priList, v)
  1149. }
  1150. }
  1151. ret.PrivateList = priList
  1152. return
  1153. }
  1154. // ShareSingleGroupPptEnglishEnglish 共享单个ppt/取消共享单个ppt,返回共享状态
  1155. // @Author roc
  1156. // @Time 2022-08-29 15:22:20
  1157. func ShareSingleGroupPptEnglish(pptId int, adminId int) (pptInfo *ppt_english.PptEnglish, err error) {
  1158. //判断当前登录者是否有共享的权限
  1159. pptInfo, err = ppt_english.GetPptEnglishById(pptId)
  1160. if err != nil {
  1161. if utils.IsErrNoRow(err) {
  1162. err = errors.New("当前目录下的ppt不存在")
  1163. return
  1164. }
  1165. err = errors.New("目录下的ppt查询出错:" + err.Error())
  1166. return
  1167. }
  1168. if pptInfo.AdminId != adminId {
  1169. err = errors.New("该Ppt不是本人创建")
  1170. return
  1171. }
  1172. //判断当前的共享状态
  1173. if pptInfo.IsShare > 0 {
  1174. pptInfo.IsShare = 0
  1175. err = pptInfo.Update([]string{"IsShare"})
  1176. if err != nil {
  1177. err = errors.New(err.Error())
  1178. return
  1179. }
  1180. } else {
  1181. pptInfo.IsShare = 1
  1182. err = pptInfo.Update([]string{"IsShare"})
  1183. if err != nil {
  1184. err = errors.New(err.Error())
  1185. return
  1186. }
  1187. }
  1188. return
  1189. }
  1190. func GetMyPptEnglishList(adminId int, keyword string) (ret ppt_english.RespGroupPptList, err error) {
  1191. list := make([]*ppt_english.RespGroupPptListItem, 0)
  1192. ret.List = list
  1193. var condition string
  1194. var pars []interface{}
  1195. condition += ` AND admin_id=? `
  1196. pars = append(pars, adminId)
  1197. if keyword != `` {
  1198. condition += ` AND (title LIKE ? OR admin_real_name LIKE ? ) `
  1199. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  1200. }
  1201. pptList, err := ppt_english.GetAllPptEnglishList(condition, pars)
  1202. if len(pptList) <= 0 {
  1203. return
  1204. }
  1205. var pptContent []services.PPTContent
  1206. for _, v := range pptList {
  1207. if v.PptPage == 0 {
  1208. err = json.Unmarshal([]byte(v.Content), &pptContent)
  1209. if err != nil {
  1210. return
  1211. }
  1212. v.PptPage = len(pptContent)
  1213. }
  1214. tmpV := &ppt_english.RespGroupPptListItem{
  1215. GroupPptId: int64(v.PptId),
  1216. PptId: int64(v.PptId),
  1217. TemplateType: v.TemplateType,
  1218. BackgroundImg: v.BackgroundImg,
  1219. Title: v.Title,
  1220. PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
  1221. PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  1222. AdminId: v.AdminId,
  1223. AdminRealName: v.AdminRealName,
  1224. IsSingleShare: v.IsShare,
  1225. PptxUrl: v.PptxUrl,
  1226. ReportId: v.ReportId,
  1227. ReportCode: v.ReportCode,
  1228. PublishTime: utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
  1229. PptPage: v.PptPage,
  1230. }
  1231. list = append(list, tmpV)
  1232. }
  1233. ret.List = list
  1234. ret.Total = len(list)
  1235. return
  1236. }
  1237. // GetSharePptList 公共目录下的ppt列表
  1238. // @Author roc
  1239. // @Time 2022-08-29 16:27:59
  1240. func GetSharePptEnglishList(adminId int, keyword string, isPrivate bool) (ret ppt_english.RespGroupPptList, err error) {
  1241. list := make([]*ppt_english.RespGroupPptListItem, 0)
  1242. ret.List = list
  1243. var condition string
  1244. var pars []interface{}
  1245. // 公开的ppt
  1246. condition += ` AND is_share=? `
  1247. if isPrivate {
  1248. pars = append(pars, 0)
  1249. } else {
  1250. pars = append(pars, 1)
  1251. }
  1252. if adminId > 0 {
  1253. condition += ` AND admin_id=? `
  1254. pars = append(pars, adminId)
  1255. }
  1256. if keyword != `` {
  1257. condition += ` AND (title LIKE ? OR admin_real_name LIKE ? ) `
  1258. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  1259. }
  1260. pptList, err := ppt_english.GetAllPptEnglishList(condition, pars)
  1261. if len(pptList) <= 0 {
  1262. return
  1263. }
  1264. var pptContent []services.PPTContent
  1265. for _, v := range pptList {
  1266. if v.PptPage == 0 {
  1267. err = json.Unmarshal([]byte(v.Content), &pptContent)
  1268. if err != nil {
  1269. return
  1270. }
  1271. v.PptPage = len(pptContent)
  1272. }
  1273. tmpV := &ppt_english.RespGroupPptListItem{
  1274. GroupPptId: int64(v.PptId),
  1275. PptId: int64(v.PptId),
  1276. TemplateType: v.TemplateType,
  1277. BackgroundImg: v.BackgroundImg,
  1278. Title: v.Title,
  1279. PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
  1280. PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  1281. AdminId: v.AdminId,
  1282. AdminRealName: v.AdminRealName,
  1283. IsSingleShare: v.IsShare,
  1284. PptxUrl: v.PptxUrl,
  1285. ReportId: v.ReportId,
  1286. ReportCode: v.ReportCode,
  1287. PublishTime: utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
  1288. PptPage: v.PptPage,
  1289. }
  1290. list = append(list, tmpV)
  1291. }
  1292. ret.List = list
  1293. ret.Total = len(list)
  1294. return
  1295. }
  1296. // GetGrantPptList 公共目录下的ppt列表
  1297. // @Author roc
  1298. // @Time 2022-09-05 15:50:25
  1299. func GetGrantPptEnglishList(adminId int, keyword, sourceType string) (ret ppt_english.RespGroupPptList, err error) {
  1300. list := make([]*ppt_english.RespGroupPptListItem, 0)
  1301. ret.List = list
  1302. var condition string
  1303. var pars []interface{}
  1304. switch sourceType {
  1305. case "my":
  1306. condition += ` AND a.admin_id = ? `
  1307. pars = append(pars, adminId)
  1308. case "other":
  1309. condition += ` AND a.admin_id != ? AND (b.department_id = 1 OR b.grant_admin_id = ?) `
  1310. pars = append(pars, adminId, adminId)
  1311. default:
  1312. err = errors.New("无效的来源")
  1313. return
  1314. }
  1315. if keyword != `` {
  1316. condition += ` AND a.title LIKE ? `
  1317. pars = utils.GetLikeKeywordPars(pars, keyword, 1)
  1318. }
  1319. pptList, err := ppt_english.GetGrantList(condition, pars)
  1320. if err != nil {
  1321. return
  1322. }
  1323. if len(pptList) <= 0 {
  1324. return
  1325. }
  1326. var pptContent []services.PPTContent
  1327. for _, v := range pptList {
  1328. if v.PptPage == 0 {
  1329. err = json.Unmarshal([]byte(v.Content), &pptContent)
  1330. if err != nil {
  1331. return
  1332. }
  1333. v.PptPage = len(pptContent)
  1334. }
  1335. tmpV := &ppt_english.RespGroupPptListItem{
  1336. GroupPptId: int64(v.PptId),
  1337. PptId: int64(v.PptId),
  1338. TemplateType: v.TemplateType,
  1339. BackgroundImg: v.BackgroundImg,
  1340. Title: v.Title,
  1341. PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
  1342. PptModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
  1343. AdminId: v.AdminId,
  1344. AdminRealName: v.AdminRealName,
  1345. PptVersion: v.PptVersion,
  1346. IsSingleShare: v.IsShare,
  1347. PptxUrl: v.PptxUrl,
  1348. ReportId: v.ReportId,
  1349. ReportCode: v.ReportCode,
  1350. PublishTime: utils.DealDateTimeZero(v.PublishTime, utils.FormatDateTime),
  1351. PptPage: v.PptPage,
  1352. }
  1353. list = append(list, tmpV)
  1354. }
  1355. ret.List = list
  1356. ret.Total = len(list)
  1357. return
  1358. }
  1359. // GetEnglishCopyUsableTitle 根据原标题获取复制/转换可用的标题
  1360. func GetEnglishCopyUsableTitle(title string) (newTitle string, err error) {
  1361. if title == "" {
  1362. return
  1363. }
  1364. // 标题列表
  1365. titles, e := ppt_english.GetPPTTitleList()
  1366. if e != nil {
  1367. err = errors.New("获取英文PPT标题列表失败, Err: " + e.Error())
  1368. return
  1369. }
  1370. if !utils.InArrayByStr(titles, title) {
  1371. newTitle = title
  1372. return
  1373. }
  1374. // 新标题
  1375. titleFormat := title + "(%d)"
  1376. for i := 1; i < 999; i++ {
  1377. newTitle = fmt.Sprintf(titleFormat, i)
  1378. if !utils.InArrayByStr(titles, newTitle) {
  1379. return
  1380. }
  1381. }
  1382. return
  1383. }
  1384. // SearchEnglishPptList PPT搜索(我的/公开PPT)
  1385. func SearchEnglishPptList(adminId int, keyword string) (ret ppt_english.RespGroupPptList, err error) {
  1386. list := make([]*ppt_english.RespGroupPptListItem, 0)
  1387. ret.List = list
  1388. var condition string
  1389. var pars []interface{}
  1390. // 公开的PPT或是我的非公开PPT
  1391. condition += ` AND (is_share = 1 OR (admin_id = ? AND is_share = 0)) `
  1392. pars = append(pars, adminId)
  1393. if keyword != `` {
  1394. kw := fmt.Sprint("%", keyword, "%")
  1395. condition += ` AND (title LIKE ? OR admin_real_name LIKE ? ) `
  1396. pars = append(pars, kw, kw)
  1397. }
  1398. pptList, err := ppt_english.GetAllPptEnglishList(condition, pars)
  1399. if len(pptList) <= 0 {
  1400. return
  1401. }
  1402. var pptContent []services.PPTContent
  1403. for _, v := range pptList {
  1404. if v.PptPage == 0 {
  1405. err = json.Unmarshal([]byte(v.Content), &pptContent)
  1406. if err != nil {
  1407. return
  1408. }
  1409. v.PptPage = len(pptContent)
  1410. }
  1411. tmpV := &ppt_english.RespGroupPptListItem{
  1412. GroupPptId: int64(v.PptId),
  1413. PptId: int64(v.PptId),
  1414. TemplateType: v.TemplateType,
  1415. BackgroundImg: v.BackgroundImg,
  1416. Title: v.Title,
  1417. PptCreateTime: v.CreateTime.Format(utils.FormatDateTime),
  1418. AdminId: v.AdminId,
  1419. AdminRealName: v.AdminRealName,
  1420. IsSingleShare: v.IsShare,
  1421. PptxUrl: v.PptxUrl,
  1422. ReportId: v.ReportId,
  1423. ReportCode: v.ReportCode,
  1424. PptPage: v.PptPage,
  1425. }
  1426. list = append(list, tmpV)
  1427. }
  1428. ret.List = list
  1429. ret.Total = len(list)
  1430. return
  1431. }