cloud_disk_resource.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. package models
  2. import (
  3. "eta/eta_api/utils"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "github.com/rdlucklib/rdluck_tools/paging"
  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 `orm:"column(resource_id);pk" 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. o := orm.NewOrm()
  33. id, err := o.Insert(m)
  34. if err != nil {
  35. return
  36. }
  37. m.ResourceId = int(id)
  38. return
  39. }
  40. func (m *CloudDiskResource) Update(cols []string) (err error) {
  41. o := orm.NewOrm()
  42. _, err = o.Update(m, cols...)
  43. return
  44. }
  45. func (m *CloudDiskResource) Delete() (err error) {
  46. o := orm.NewOrm()
  47. sql := `DELETE FROM cloud_disk_resource WHERE resource_id = ? LIMIT 1`
  48. _, err = o.Raw(sql, m.ResourceId).Exec()
  49. return
  50. }
  51. func (m *CloudDiskResource) GetItemById(id int) (err error) {
  52. o := orm.NewOrm()
  53. sql := fmt.Sprintf(`SELECT * FROM %s WHERE resource_id = ? LIMIT 1`, m.TableName())
  54. err = o.Raw(sql, id).QueryRow(&m)
  55. return
  56. }
  57. func (m *CloudDiskResource) GetItemByCondition(condition string, pars []interface{}) (err error) {
  58. o := orm.NewOrm()
  59. sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
  60. err = o.Raw(sql, pars).QueryRow(&m)
  61. return
  62. }
  63. func (m *CloudDiskResource) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*CloudDiskResource, err error) {
  64. o := orm.NewOrm()
  65. fields := strings.Join(fieldArr, ",")
  66. if len(fieldArr) == 0 {
  67. fields = `*`
  68. }
  69. order := ``
  70. if orderRule != "" {
  71. order = ` ORDER BY ` + orderRule
  72. }
  73. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
  74. _, err = o.Raw(sql, pars).QueryRows(&items)
  75. return
  76. }
  77. // CloudDiskCheckResourceRepeatReq 校验文件重名请求体
  78. type CloudDiskCheckResourceRepeatReq struct {
  79. MenuId int `description:"目录ID"`
  80. FileNames []string `description:"文件名"`
  81. }
  82. // CloudDiskCheckResourceRepeatResp 校验文件重名响应体
  83. type CloudDiskCheckResourceRepeatResp struct {
  84. OriginName string `description:"原文件名(包含后缀名)"`
  85. IsRepeat bool `description:"是否重复"`
  86. AvailableName string `description:"可用名"`
  87. }
  88. // CloudDiskResourceRenameReq 重命名文件请求体
  89. type CloudDiskResourceRenameReq struct {
  90. ResourceId int `description:"文件ID"`
  91. ResourceName string `description:"文件名称"`
  92. }
  93. type CloudDiskResourceModifyReq struct {
  94. ResourceId int `description:"文件ID"`
  95. MenuId int `description:"目录ID"`
  96. ResourceName string `description:"文件名称"`
  97. }
  98. // CloudDiskResourceDeleteReq 删除文件请求体
  99. type CloudDiskResourceDeleteReq struct {
  100. ResourceId int `description:"文件ID"`
  101. }
  102. // CloudDiskListResp 云盘列表响应体
  103. type CloudDiskListResp struct {
  104. List []*CloudDiskListItem `description:"列表数据"`
  105. CreateMenuAuth bool `description:"新建文件夹权限"`
  106. UploadResourceAuth bool `description:"上传文件的权限"`
  107. BatchDelAuth bool `description:"批量删除目录/文件的权限(仅管理员有)"`
  108. ListPath []*CloudDiskMenuResourcePath `description:"面包屑"`
  109. }
  110. // CloudDiskListItem 云盘列表数据
  111. type CloudDiskListItem struct {
  112. ItemId int `description:"ID"`
  113. ItemName string `description:"名称"`
  114. ItemType int `description:"类型: 1-目录; 2-文件"`
  115. ParentId int `description:"父级目录ID"`
  116. ParentName string `description:"父级目录文件名"`
  117. Size int64 `description:"大小"`
  118. SizeName string `description:"目录/文件大小(格式化)"`
  119. ResourceUrl string `description:"文件地址"`
  120. ItemIcon string `description:"图标"`
  121. AdminId int `description:"创建人ID"`
  122. AdminName string `description:"创建人"`
  123. CreateTime string `description:"创建时间"`
  124. ButtonAuth *CloudDiskListButton `description:"按钮权限"`
  125. }
  126. // CloudDiskListButton 云盘列表按钮权限
  127. type CloudDiskListButton struct {
  128. RenameAuth bool `description:"重命名文件夹的权限"`
  129. DelAuth bool `description:"删除文件夹的权限"`
  130. }
  131. // CloudDiskMenuResourcePath 云盘目录/文件面包屑
  132. type CloudDiskMenuResourcePath struct {
  133. MenuId int `description:"目录ID"`
  134. MenuName string `description:"目录名称"`
  135. ParentId int `description:"父级目录ID"`
  136. Sort int `description:"排序"`
  137. Selected bool `description:"是否选中"`
  138. }
  139. // 分页查询响应结果
  140. type CloudDiskMenuResourcePageResp struct {
  141. List []*CloudDiskResourcePageItem
  142. Paging *paging.PagingItem `description:"分页数据"`
  143. }
  144. // GetCloudDiskMenuAndResourceList UNION获取云盘列表数据
  145. func GetCloudDiskMenuAndResourceList(menuCond, resourceCond string, menuPars, resourcePars []interface{}, orderRule string) (items []*CloudDiskListItem, err error) {
  146. o := orm.NewOrm()
  147. 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
  148. WHERE 1=1 %s
  149. UNION
  150. 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
  151. WHERE 1=1 %s %s`
  152. order := ` ORDER BY item_type ASC `
  153. if orderRule != "" {
  154. order = ` ORDER BY ` + orderRule
  155. }
  156. sql := fmt.Sprintf(base, menuCond, resourceCond, order)
  157. _, err = o.Raw(sql, menuPars, resourcePars).QueryRows(&items)
  158. return
  159. }
  160. // GetSizeTotalByMenuIds 获取目录所属文件总大小
  161. func GetSizeTotalByMenuIds(menuIds []int) (sizeTotal int64, err error) {
  162. if len(menuIds) == 0 {
  163. return
  164. }
  165. o := orm.NewOrm()
  166. sql := `SELECT SUM(size) FROM cloud_disk_resource WHERE menu_id IN (` + utils.GetOrmInReplace(len(menuIds)) + `)`
  167. err = o.Raw(sql, menuIds).QueryRow(&sizeTotal)
  168. return
  169. }
  170. // CloudDiskBatchDeleteReq 批量删除请求体
  171. type CloudDiskBatchDeleteReq struct {
  172. MenuId int `description:"当前目录ID"`
  173. MenuIds string `description:"目录IDs"`
  174. ResourceIds string `description:"文件IDs"`
  175. }
  176. type CloudDiskBatchMoveReq struct {
  177. KeyWord string `description:"关键字"`
  178. ResourceIds string `description:"文件IDs"`
  179. MenuIds string `description:"当前目录ID"`
  180. MoveAll bool `description:"是否全选"`
  181. TargetMenuId int `description:"移动新目录ID"`
  182. }
  183. // BatchDeleteCloudDiskMenuAndResource 批量删除目录及文件
  184. func BatchDeleteCloudDiskMenuAndResource(menuIds, resourceIds []int) (err error) {
  185. menuLens := len(menuIds)
  186. resourceLens := len(resourceIds)
  187. if menuLens == 0 && resourceLens == 0 {
  188. return
  189. }
  190. o := orm.NewOrm()
  191. tx, err := o.Begin()
  192. if err != nil {
  193. return
  194. }
  195. defer func() {
  196. if err != nil {
  197. _ = tx.Rollback()
  198. } else {
  199. _ = tx.Commit()
  200. }
  201. }()
  202. if menuLens > 0 {
  203. sql := `DELETE FROM cloud_disk_menu WHERE menu_id IN (` + utils.GetOrmInReplace(menuLens) + `)`
  204. if _, err = tx.Raw(sql, menuIds).Exec(); err != nil {
  205. return
  206. }
  207. sql = `DELETE FROM cloud_disk_resource WHERE menu_id IN (` + utils.GetOrmInReplace(menuLens) + `)`
  208. if _, err = tx.Raw(sql, menuIds).Exec(); err != nil {
  209. return
  210. }
  211. }
  212. if resourceLens > 0 {
  213. sql := `DELETE FROM cloud_disk_resource WHERE resource_id IN (` + utils.GetOrmInReplace(resourceLens) + `)`
  214. if _, err = tx.Raw(sql, resourceIds).Exec(); err != nil {
  215. return
  216. }
  217. }
  218. return
  219. }
  220. func GetCloudDiskResourcePageCount(resourceCond string, resourcePars []interface{}) (total int, err error) {
  221. o := orm.NewOrm()
  222. sql := fmt.Sprintf(`SELECT COUNT(1) FROM cloud_disk_resource WHERE 1=1 %s `, resourceCond)
  223. err = o.Raw(sql, resourcePars).QueryRow(&total)
  224. return
  225. }
  226. func GetCloudDiskResourcePageList(resourceCond string, resourcePars []interface{}, orderRule string, startSize, pageSize int, menuNameMap map[int]string) (resourceList []*CloudDiskResourcePageItem, err error) {
  227. o := orm.NewOrm()
  228. sql := fmt.Sprintf(`SELECT resource_id , resource_name, resource_suffix, menu_id, size, admin_name, create_time FROM cloud_disk_resource WHERE 1=1 %s order by %s LIMIT ?,?`, resourceCond, orderRule)
  229. var ormList []*CloudDiskResource
  230. _, err = o.Raw(sql, resourcePars, startSize, pageSize).QueryRows(&ormList)
  231. if err != nil {
  232. return
  233. }
  234. resourceList = toCloudDiskResourcePageList(ormList, menuNameMap)
  235. return
  236. }
  237. type CloudDiskResourcePageItem struct {
  238. ResourceId int
  239. ResourceName string
  240. ResourceSuffix string
  241. MenuId int
  242. MenuPath string
  243. AdminName string
  244. CreateTime string
  245. Size int64
  246. }
  247. func (this *CloudDiskResource) toPageItem(menuNameMap map[int]string) *CloudDiskResourcePageItem {
  248. return &CloudDiskResourcePageItem{
  249. ResourceId: this.ResourceId,
  250. ResourceName: this.ResourceName,
  251. MenuId: this.MenuId,
  252. ResourceSuffix: this.ResourceSuffix,
  253. MenuPath: menuNameMap[this.MenuId],
  254. AdminName: this.AdminName,
  255. CreateTime: this.CreateTime.Format(utils.FormatDateTime),
  256. Size: this.Size,
  257. }
  258. }
  259. func (this *CloudDiskResource) toItem() *CloudDiskResourcePageItem {
  260. return &CloudDiskResourcePageItem{
  261. ResourceId: this.ResourceId,
  262. ResourceName: this.ResourceName,
  263. MenuId: this.MenuId,
  264. ResourceSuffix: this.ResourceSuffix,
  265. AdminName: this.AdminName,
  266. CreateTime: this.CreateTime.Format(utils.FormatDateTime),
  267. Size: this.Size,
  268. }
  269. }
  270. func toCloudDiskResourcePageList(items []*CloudDiskResource, menuNameMap map[int]string) (resourceList []*CloudDiskResourcePageItem) {
  271. for _, item := range items {
  272. resourceList = append(resourceList, item.toPageItem(menuNameMap))
  273. }
  274. return
  275. }
  276. func toCloudDiskResourceList(items []*CloudDiskResource) (resourceList []*CloudDiskResourcePageItem) {
  277. for _, item := range items {
  278. resourceList = append(resourceList, item.toItem())
  279. }
  280. return
  281. }
  282. func GetCloudDiskResourceList(resourceCond string, resourcePars []interface{}) (resourceList []*CloudDiskResourcePageItem, err error) {
  283. o := orm.NewOrm()
  284. sql := fmt.Sprintf(`SELECT resource_id , resource_name, resource_suffix, menu_id, size, admin_name, create_time FROM cloud_disk_resource WHERE 1=1 %s `, resourceCond)
  285. var ormList []*CloudDiskResource
  286. _, err = o.Raw(sql, resourcePars).QueryRows(&ormList)
  287. if err != nil {
  288. return
  289. }
  290. resourceList = toCloudDiskResourceList(ormList)
  291. return
  292. }
  293. func BatchMoveCloudDiskResource(menuId int, resourceIds []int) (err error) {
  294. resourceLens := len(resourceIds)
  295. if resourceLens == 0 {
  296. return
  297. }
  298. o := orm.NewOrm()
  299. sql := `UPDATE cloud_disk_resource SET menu_id = ? WHERE resource_id IN (` + utils.GetOrmInReplace(resourceLens) + `)`
  300. _, err = o.Raw(sql, menuId, resourceIds).Exec()
  301. return
  302. }