ppt_english_group.go 43 KB

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