123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- package services
- import (
- "eta/eta_api/models"
- "eta/eta_api/models/company"
- "eta/eta_api/utils"
- "fmt"
- "sort"
- "strings"
- "time"
- )
- // CheckCloudDiskManagerAuth 校验云盘管理员权限
- func CheckCloudDiskManagerAuth(roleCode string) (ok bool, err error) {
- confKey := "cloud_disk_manager_role"
- conf, e := company.GetConfigDetailByCode(confKey)
- if e != nil {
- err = fmt.Errorf("获取管理员权限配置失败, Err: %s", e.Error())
- return
- }
- if conf.ConfigValue == "" {
- err = fmt.Errorf("管理员权限配置信息有误")
- return
- }
- authArr := strings.Split(conf.ConfigValue, ",")
- if utils.InArrayByStr(authArr, roleCode) {
- ok = true
- }
- return
- }
- // GetCloudDiskMenuIdsByParentId 云盘目录-通过父级ID获取所有子ID
- func GetCloudDiskMenuIdsByParentId(menuId int) (menuIds []int, err error) {
- menuOB := new(models.CloudDiskMenu)
- menuCond := ``
- menuPars := make([]interface{}, 0)
- menuFields := []string{"menu_id", "parent_id"}
- menus, e := menuOB.GetItemsByCondition(menuCond, menuPars, menuFields, "")
- if e != nil {
- err = fmt.Errorf("获取目录列表失败, Err: %s", e.Error())
- return
- }
- // 若父级ID为0, 取全部
- if menuId == 0 {
- for i := range menus {
- menuIds = append(menuIds, menus[i].MenuId)
- }
- return
- }
- // 父级ID大于0
- menuIds = loadChildrenIds(menuId, menus)
- return
- }
- // loadChildrenIds 递归遍历出子分类ID
- func loadChildrenIds(parentId int, menus []*models.CloudDiskMenu) []int {
- menuIds := make([]int, 0)
- for i := range menus {
- if parentId == menus[i].ParentId {
- childIds := loadChildrenIds(menus[i].MenuId, menus)
- menuIds = append(menuIds, menus[i].MenuId)
- menuIds = append(menuIds, childIds...)
- }
- }
- return menuIds
- }
- // GetCloudDiskMenuTree 云盘-获取目录分类树
- func GetCloudDiskMenuTree() (list []*models.CloudDiskMenuTree, err error) {
- menuOB := new(models.CloudDiskMenu)
- menuCond := ``
- menuPars := make([]interface{}, 0)
- menus, e := menuOB.GetItemsByCondition(menuCond, menuPars, []string{}, "create_time DESC")
- if e != nil {
- err = fmt.Errorf("获取目录列表失败, Err: %s", e.Error())
- return
- }
- list = make([]*models.CloudDiskMenuTree, 0)
- for i := range menus {
- if menus[i].ParentId == 0 {
- v := new(models.CloudDiskMenuTree)
- v.CloudDiskMenu = menus[i]
- v.Children = loadMenuTree(menus[i].MenuId, menus, v)
- list = append(list, v)
- }
- }
- return
- }
- // loadMenuTree 递归加载分类树
- func loadMenuTree(parentId int, menus []*models.CloudDiskMenu, parentItem *models.CloudDiskMenuTree) (children []*models.CloudDiskMenuTree) {
- children = make([]*models.CloudDiskMenuTree, 0)
- for i := range menus {
- if parentId == menus[i].ParentId {
- v := new(models.CloudDiskMenuTree)
- v.CloudDiskMenu = menus[i]
- v.Children = loadMenuTree(menus[i].MenuId, menus, v)
- children = append(children, v)
- }
- }
- parentItem.Children = children
- return
- }
- // CheckFileNameFormFiles 校验文件名并返回可用名
- func CheckFileNameFormFiles(originName, fileName string, fileList []*models.CloudDiskResource, num int) (isRepeat bool, availableName string) {
- if originName == "" || !strings.Contains(originName, ".") {
- return
- }
- // 从原名称中取出文件名和格式
- extIndex := strings.LastIndex(originName, ".")
- name := originName[:extIndex]
- ext := originName[extIndex:]
- if fileName == "" {
- fileName = name
- }
- availableName = fileName + ext
- for i := range fileList {
- if fileName == fileList[i].ResourceName {
- fileName = fmt.Sprintf("%s(%d)", name, num+1)
- isRepeat, availableName = CheckFileNameFormFiles(originName, fileName, fileList, num+1)
- isRepeat = true
- }
- }
- return
- }
- // GetCloudDiskResourceFileTypeExtMap 常见文件类型图标
- func GetCloudDiskResourceFileTypeExtMap() map[string]string {
- return map[string]string{
- ".doc": "https://hzstatic.hzinsights.com/static/icon/file_type_docx.png",
- ".docx": "https://hzstatic.hzinsights.com/static/icon/file_type_docx.png",
- ".pdf": "https://hzstatic.hzinsights.com/static/icon/file_type_pdf.png",
- ".ppt": "https://hzstatic.hzinsights.com/static/icon/file_type_ppt.png",
- ".pptx": "https://hzstatic.hzinsights.com/static/icon/file_type_ppt.png",
- ".xls": "https://hzstatic.hzinsights.com/static/icon/file_type_xlsx.png",
- ".xlsx": "https://hzstatic.hzinsights.com/static/icon/file_type_xlsx.png",
- ".jpg": "https://hzstatic.hzinsights.com/static/icon/file_type_pic.png",
- ".jpeg": "https://hzstatic.hzinsights.com/static/icon/file_type_pic.png",
- ".png": "https://hzstatic.hzinsights.com/static/icon/file_type_pic.png",
- ".bmp": "https://hzstatic.hzinsights.com/static/icon/file_type_pic.png",
- ".svg": "https://hzstatic.hzinsights.com/static/icon/file_type_pic.png",
- ".gif": "https://hzstatic.hzinsights.com/static/icon/file_type_pic.png",
- ".mp4": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".wmv": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".mov": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".mpeg": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".avi": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".flv": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".rm": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".rmvb": "https://hzstatic.hzinsights.com/static/icon/file_type_video.png",
- ".mp3": "https://hzstatic.hzinsights.com/static/icon/file_type_audio.png",
- ".wma": "https://hzstatic.hzinsights.com/static/icon/file_type_audio.png",
- }
- }
- // UpdateCloudDiskMenuSize 更新目录大小
- func UpdateCloudDiskMenuSize(menuId int) (err error) {
- if menuId <= 0 {
- return
- }
- menuItem := new(models.CloudDiskMenu)
- if e := menuItem.GetItemById(menuId); e != nil {
- err = fmt.Errorf("获取目录失败, Err: %s", e.Error())
- return
- }
- // 获取目录所属文件总大小
- menuIds := make([]int, 0)
- menuIds = append(menuIds, menuId)
- childrenIds, e := GetCloudDiskMenuIdsByParentId(menuId)
- if e != nil {
- err = fmt.Errorf("获取目录子目录IDs失败, Err: %s", e.Error())
- return
- }
- menuIds = append(menuIds, childrenIds...)
- sizeTotal, e := models.GetSizeTotalByMenuIds(menuIds)
- if e != nil {
- err = fmt.Errorf("获取目录所属文件大小失败失败, Err: %s", e.Error())
- return
- }
- // 更新
- menuItem.Size = sizeTotal
- menuItem.ModifyTime = time.Now().Local()
- if e = menuItem.Update([]string{"Size", "ModifyTime"}); e != nil {
- err = fmt.Errorf("更新目录大小失败, Err: %s", e.Error())
- return
- }
- if menuItem.ParentId > 0 {
- err = UpdateCloudDiskMenuSize(menuItem.ParentId)
- }
- return
- }
- // GetCloudDiskMenuOrResourcePath 获取目录/文件面包屑
- func GetCloudDiskMenuOrResourcePath(menuId, level int, menuMap map[int]*models.CloudDiskMenu, originMenu *models.CloudDiskMenu, pathArr []*models.CloudDiskMenuResourcePath) []*models.CloudDiskMenuResourcePath {
- if menuId == 0 || len(menuMap) == 0 || originMenu == nil {
- return nil
- }
- if level == 0 {
- level = 99
- }
- menuItem := menuMap[menuId]
- if menuItem.ParentId > 0 {
- parentItem := menuMap[menuItem.ParentId]
- if parentItem != nil {
- level -= 1
- pathArr = append(pathArr, &models.CloudDiskMenuResourcePath{
- MenuId: parentItem.MenuId,
- MenuName: parentItem.MenuName,
- ParentId: parentItem.ParentId,
- Sort: level,
- Selected: false,
- })
- if parentItem.ParentId > 0 {
- pathArr = GetCloudDiskMenuOrResourcePath(parentItem.MenuId, level-1, menuMap, originMenu, pathArr)
- } else {
- pathArr = append(pathArr, &models.CloudDiskMenuResourcePath{
- MenuId: originMenu.MenuId,
- MenuName: originMenu.MenuName,
- ParentId: originMenu.ParentId,
- Sort: 99,
- Selected: true,
- })
- }
- }
- } else {
- pathArr = append(pathArr, &models.CloudDiskMenuResourcePath{
- MenuId: originMenu.MenuId,
- MenuName: originMenu.MenuName,
- ParentId: originMenu.ParentId,
- Sort: 99,
- Selected: true,
- })
- }
- sort.Slice(pathArr, func(k, j int) bool {
- return pathArr[k].Sort < pathArr[j].Sort
- })
- return pathArr
- }
- // FillMenuPath2File 完善文件的完整路径
- func FillMenuPath2File(originMenuId, menuId int, resourcePath string, menuMap map[int]*models.CloudDiskMenu) string {
- if menuId == 0 {
- return resourcePath
- }
- menuItem := menuMap[menuId]
- if menuItem == nil {
- return resourcePath
- }
- // 若文件就在当前目录是不需要加目录路径的, 仅多级才需要加
- if menuItem.ParentId > 0 {
- resourcePath = fmt.Sprintf("%s/%s", menuItem.MenuName, resourcePath)
- resourcePath = FillMenuPath2File(originMenuId, menuItem.ParentId, resourcePath, menuMap)
- }
- return resourcePath
- }
|