cloud_disk_resource.go 9.8 KB

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