file.go 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package dao
  2. import (
  3. "iot_manager_service/app/file/model"
  4. "time"
  5. )
  6. // File 文件表
  7. type File struct {
  8. ID int `gorm:"primary_key;type:int" json:"id"` //编号
  9. OriginalName string `gorm:"type:varchar(45)" json:"originalName"` //文件原始名
  10. EncryptedName string `gorm:"type:varchar(45)" json:"encryptedName"` //文件加密名
  11. SavePath string `gorm:"type:varchar(191)" json:"savePath"` //保存路径
  12. CategoryName string `gorm:"type:varchar(12)" json:"categoryName"` //文件类别名
  13. AuthId string `gorm:"type:varchar(12);default:'100'" json:"authId"` //权限id
  14. SuffixName string `gorm:"type:varchar(12)" json:"suffixName"` //文件后缀名
  15. UploadTime *time.Time `gorm:"column:upload_time;type:datetime" json:"uploadTime"` //上传时间
  16. Uploader int `gorm:"type:int" json:"uploader"` //上传者id
  17. IsShowed int `gorm:"type:int;default:0" json:"isShowed"` //是否展示 0=展示,1=不展示
  18. Icon string `gorm:"type:varchar(191)" json:"icon"` //文件图标
  19. Iv string `gorm:"type:varchar(191)" json:"iv"` //加密文件的偏向量
  20. IsDeleted int `gorm:"type:int;default:0" json:"isDeleted"` //是否删除 0=未删除,1=删除
  21. }
  22. func (*File) TableName() string {
  23. return "file"
  24. }
  25. func (f *File) Create() error {
  26. //if !errors.Is(Db.Model(&f).Where("encrypted_name = ?", f.EncryptedName).First(&f).Error, gorm.ErrRecordNotFound) {
  27. // return errors.New("该文件已存在")
  28. //}
  29. return Db.Model(&f).Save(&f).Error
  30. }
  31. func (f *File) GetSysUserFiles(uid int, search model.SearchSysUserFiles) (files []File, total int64, err error) {
  32. //var db *gorm.DB
  33. db := Db.Table("file").
  34. Select("file.id,file.*").
  35. Joins("left join user_file uf on uf.file_id = file.id").
  36. Where("uf.receiver = ? AND file.is_showed = 0 AND file.is_deleted = 0 AND uf.is_deleted = 0 AND uf.operation_status = '下发' OR uf.operation_status = '转发'", uid). // 根据upload_time字段降序排列
  37. Group("file.id")
  38. if search.OriginalName != "" {
  39. db.Where("original_name like ?", "%"+search.OriginalName+"%")
  40. }
  41. if search.SuffixName != "" {
  42. db.Where("suffix_name = ?", search.SuffixName)
  43. }
  44. if search.Sort == 0 {
  45. db.Order("upload_time DESC")
  46. } else {
  47. db.Order("upload_time ASC")
  48. }
  49. limit := search.PageSize
  50. offset := search.PageSize * (search.PageNO - 1)
  51. db.Count(&total)
  52. // 执行查询并检查错误
  53. err = db.Limit(limit).Offset(offset).Scan(&files).Error
  54. if err != nil {
  55. return nil, 0, err
  56. }
  57. return files, total, err
  58. }
  59. func (f *File) GetFileInfo(fileid, uid int) (model.RespFileInfo, error) {
  60. var result map[string]interface{}
  61. query := `SELECT file.original_name, file.auth_id, uf.effective_date FROM
  62. file LEFT JOIN user_file uf ON uf.file_id = file.id WHERE uf.file_id = ?
  63. AND uf.receiver = ? ORDER BY uf.effective_date DESC LIMIT 1`
  64. Db.Raw(query, fileid, uid).Scan(&result)
  65. authId, _ := result["auth_id"].(string)
  66. originalName, _ := result["original_name"].(string)
  67. effectiveDate, _ := result["effective_date"].(time.Time)
  68. return model.RespFileInfo{AuthId: authId, OriginalName: originalName, EffectiveDate: effectiveDate}, nil
  69. }
  70. func (f *File) GetFile(id string) (*File, error) {
  71. err := Db.Model(&f).Where("id = ?", id).First(&f).Error
  72. return f, err
  73. }
  74. func (f *File) GetMyUploadFiles(id int) ([]File, error) {
  75. var files []File
  76. err := Db.Model(&f).Where("uploader = ? and is_deleted = 0", id).Order("upload_time desc").Find(&files).Error
  77. if err != nil {
  78. return nil, err
  79. }
  80. return files, err
  81. }