cloud_disk_resource.go 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package models
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "gorm.io/gorm"
  7. "strings"
  8. "time"
  9. )
  10. // 文件格式图标
  11. const (
  12. CloudDiskResourceFileTypeIconMenu = "https://hzstatic.hzinsights.com/static/icon/file_type_menu.png"
  13. CloudDiskResourceFileTypeIconUnknown = "https://hzstatic.hzinsights.com/static/icon/file_type_unknown.png"
  14. )
  15. type CloudDiskResource struct {
  16. ResourceId int `gorm:"column:resource_id;primaryKey;autoIncrement" description:"资源ID"`
  17. MenuId int `description:"目录ID"`
  18. ResourceName string `description:"文件名"`
  19. ResourceSuffix string `description:"文件后缀名"`
  20. ResourceUrl string `description:"文件地址"`
  21. ResourceIcon string `description:"文件类型图标"`
  22. AdminId int `description:"创建人ID"`
  23. AdminName string `description:"创建人名称"`
  24. Size int64 `description:"目录大小"`
  25. CreateTime time.Time `description:"创建时间"`
  26. ModifyTime time.Time `description:"修改时间"`
  27. }
  28. func (m *CloudDiskResource) TableName() string {
  29. return "cloud_disk_resource"
  30. }
  31. func (m *CloudDiskResource) Create() (err error) {
  32. err = global.DEFAULT_DB.Create(m).Error
  33. return
  34. }
  35. func (m *CloudDiskResource) Update(cols []string) (err error) {
  36. err = global.DEFAULT_DB.Select(cols).Updates(m).Error
  37. return
  38. }
  39. func (m *CloudDiskResource) Delete() (err error) {
  40. sql := `DELETE FROM cloud_disk_resource WHERE resource_id = ? LIMIT 1`
  41. err = global.DEFAULT_DB.Exec(sql, m.ResourceId).Error
  42. return
  43. }
  44. func (m *CloudDiskResource) GetItemById(id int) (err error) {
  45. sql := fmt.Sprintf(`SELECT * FROM %s WHERE resource_id = ? LIMIT 1`, m.TableName())
  46. err = global.DEFAULT_DB.Raw(sql, id).Find(&m).Error
  47. return
  48. }
  49. func (m *CloudDiskResource) GetItemByCondition(condition string, pars []interface{}) (err error) {
  50. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
  51. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&m).Error
  52. return
  53. }
  54. func (m *CloudDiskResource) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*CloudDiskResource, err error) {
  55. fields := strings.Join(fieldArr, ",")
  56. if len(fieldArr) == 0 {
  57. fields = `*`
  58. }
  59. order := ``
  60. if orderRule != "" {
  61. order = ` ORDER BY ` + orderRule
  62. }
  63. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  64. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  65. return
  66. }
  67. // CloudDiskCheckResourceRepeatReq 校验文件重名请求体
  68. type CloudDiskCheckResourceRepeatReq struct {
  69. MenuId int `description:"目录ID"`
  70. FileNames []string `description:"文件名"`
  71. }
  72. // CloudDiskCheckResourceRepeatResp 校验文件重名响应体
  73. type CloudDiskCheckResourceRepeatResp struct {
  74. OriginName string `description:"原文件名(包含后缀名)"`
  75. IsRepeat bool `description:"是否重复"`
  76. AvailableName string `description:"可用名"`
  77. }
  78. // CloudDiskResourceRenameReq 重命名文件请求体
  79. type CloudDiskResourceRenameReq struct {
  80. ResourceId int `description:"文件ID"`
  81. ResourceName string `description:"文件名称"`
  82. }
  83. // CloudDiskResourceDeleteReq 删除文件请求体
  84. type CloudDiskResourceDeleteReq struct {
  85. ResourceId int `description:"文件ID"`
  86. }
  87. // CloudDiskListResp 云盘列表响应体
  88. type CloudDiskListResp struct {
  89. List []*CloudDiskListItem `description:"列表数据"`
  90. CreateMenuAuth bool `description:"新建文件夹权限"`
  91. UploadResourceAuth bool `description:"上传文件的权限"`
  92. BatchDelAuth bool `description:"批量删除目录/文件的权限(仅管理员有)"`
  93. ListPath []*CloudDiskMenuResourcePath `description:"面包屑"`
  94. }
  95. // CloudDiskListItem 云盘列表数据
  96. type CloudDiskListItem struct {
  97. ItemId int `description:"ID"`
  98. ItemName string `description:"名称"`
  99. ItemType int `description:"类型: 1-目录; 2-文件"`
  100. ParentId int `description:"父级目录ID"`
  101. ParentName string `description:"父级目录文件名"`
  102. Size int64 `description:"大小"`
  103. SizeName string `description:"目录/文件大小(格式化)"`
  104. ResourceUrl string `description:"文件地址"`
  105. ItemIcon string `description:"图标"`
  106. AdminId int `description:"创建人ID"`
  107. AdminName string `description:"创建人"`
  108. CreateTime string `description:"创建时间"`
  109. ButtonAuth *CloudDiskListButton `description:"按钮权限" gorm:"-"`
  110. }
  111. func (m *CloudDiskListItem) AfterFind(db *gorm.DB) (err error) {
  112. m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
  113. return
  114. }
  115. // CloudDiskListButton 云盘列表按钮权限
  116. type CloudDiskListButton struct {
  117. RenameAuth bool `description:"重命名文件夹的权限"`
  118. DelAuth bool `description:"删除文件夹的权限"`
  119. }
  120. // CloudDiskMenuResourcePath 云盘目录/文件面包屑
  121. type CloudDiskMenuResourcePath struct {
  122. MenuId int `description:"目录ID"`
  123. MenuName string `description:"目录名称"`
  124. ParentId int `description:"父级目录ID"`
  125. Sort int `description:"排序"`
  126. Selected bool `description:"是否选中"`
  127. }
  128. // GetCloudDiskMenuAndResourceList UNION获取云盘列表数据
  129. func GetCloudDiskMenuAndResourceList(menuCond, resourceCond string, menuPars, resourcePars []interface{}, orderRule string) (items []*CloudDiskListItem, err error) {
  130. base := `SELECT menu_id AS item_id, menu_name AS item_name, 1 AS item_type, parent_id, size, '' AS resource_url, '' AS item_icon, admin_id, admin_name, create_time FROM cloud_disk_menu
  131. WHERE 1=1 %s
  132. UNION
  133. SELECT resource_id, CONCAT(resource_name,resource_suffix), 2, menu_id, size, resource_url, resource_icon, admin_id, admin_name, create_time FROM cloud_disk_resource
  134. WHERE 1=1 %s %s`
  135. order := ` ORDER BY item_type ASC `
  136. if orderRule != "" {
  137. order = ` ORDER BY ` + orderRule
  138. }
  139. sql := fmt.Sprintf(base, menuCond, resourceCond, order)
  140. pars := make([]interface{}, 0)
  141. pars = append(pars, menuPars, resourcePars)
  142. sql = utils.ReplaceDriverKeywords("", sql)
  143. err = global.DEFAULT_DB.Raw(sql, pars...).Find(&items).Error
  144. return
  145. }
  146. // GetSizeTotalByMenuIds 获取目录所属文件总大小
  147. func GetSizeTotalByMenuIds(menuIds []int) (sizeTotal int64, err error) {
  148. if len(menuIds) == 0 {
  149. return
  150. }
  151. sql := `SELECT SUM(size) FROM cloud_disk_resource WHERE menu_id IN (` + utils.GetOrmInReplace(len(menuIds)) + `)`
  152. err = global.DEFAULT_DB.Raw(sql, menuIds).Scan(&sizeTotal).Error
  153. return
  154. }
  155. // CloudDiskBatchDeleteReq 批量删除请求体
  156. type CloudDiskBatchDeleteReq struct {
  157. MenuId int `description:"当前目录ID"`
  158. MenuIds string `description:"目录IDs"`
  159. ResourceIds string `description:"文件IDs"`
  160. }
  161. // BatchDeleteCloudDiskMenuAndResource 批量删除目录及文件
  162. func BatchDeleteCloudDiskMenuAndResource(menuIds, resourceIds []int) (err error) {
  163. menuLens := len(menuIds)
  164. resourceLens := len(resourceIds)
  165. if menuLens == 0 && resourceLens == 0 {
  166. return
  167. }
  168. tx := global.DEFAULT_DB.Begin()
  169. defer func() {
  170. if err != nil {
  171. _ = tx.Rollback()
  172. } else {
  173. _ = tx.Commit()
  174. }
  175. }()
  176. if menuLens > 0 {
  177. sql := `DELETE FROM cloud_disk_menu WHERE menu_id IN (` + utils.GetOrmInReplace(menuLens) + `)`
  178. err = tx.Exec(sql, menuIds).Error
  179. if err != nil {
  180. return
  181. }
  182. sql = `DELETE FROM cloud_disk_resource WHERE menu_id IN (` + utils.GetOrmInReplace(menuLens) + `)`
  183. err = tx.Exec(sql, menuIds).Error
  184. if err != nil {
  185. return
  186. }
  187. }
  188. if resourceLens > 0 {
  189. sql := `DELETE FROM cloud_disk_resource WHERE resource_id IN (` + utils.GetOrmInReplace(resourceLens) + `)`
  190. err = tx.Exec(sql, resourceIds).Error
  191. if err != nil {
  192. return
  193. }
  194. }
  195. return
  196. }