package service import ( "blog/internal/consts" "blog/internal/model/admin" "blog/internal/model/vo" "blog/third_party/database" "context" "log" "time" ) type fileService struct { } var FileService fileService func (*fileService) GetFile(id string) (vo.CommonFiles, error) { ctx := context.Background() var file vo.CommonFiles var bytes []byte err := database.RedisTemplate.Get(ctx, consts.REDIS_FILE+id).Scan(&file) //如果缓存不存在,则查数据库并存入Redis if err != nil || file.Id == "" { database.GormTemplate.Table("common_files").Where("id = ?", id).First(&file) bytes = file.Data err = database.RedisTemplate.Set(ctx, consts.REDIS_FILE+id, &file, time.Duration(0)).Err() if err != nil { log.Println(err) } err = database.RedisTemplate.Set(ctx, consts.REDIS_FILE_BYTES+id, bytes, time.Duration(0)).Err() if err != nil { log.Println(err) } return file, nil } bytes, err = database.RedisTemplate.Get(ctx, consts.REDIS_FILE_BYTES+id).Bytes() file.Data = bytes return file, err } func (*fileService) PageSysFiles(page int, itemsPerPage int) vo.Page[admin.SysFile] { var content []admin.SysFile var totalElements int64 database.GormTemplate.Table("common_files").Count(&totalElements) database.GormTemplate.Table("common_files"). Where("del != ?", 1). Offset((page - 1) * itemsPerPage). Limit(itemsPerPage). Order("create_time DESC"). Find(&content) pre := int(totalElements) % itemsPerPage if pre > 0 { pre = 1 } var totalPages int = int(totalElements)/itemsPerPage + pre return vo.Page[admin.SysFile]{TotalElements: totalElements, TotalPages: totalPages, Number: page, Content: content} }