ppt_english_group.go 40 KB

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