package comm import ( "applet/app/db" "applet/app/e" "applet/app/md" "applet/app/md/comm" "applet/app/svc" "applet/app/svc/sys_cfg" "applet/app/utils/cache" "code.fnuoos.com/EggPlanet/egg_models.git/src/implement" "code.fnuoos.com/EggPlanet/egg_models.git/src/model" enum2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" "errors" "fmt" "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/gin-gonic/gin" "time" ) // GetOssUrl // @Summary 通用请求-对象存储-上传许可链接(获取) // @Tags 对象存储 // @Description 上传许可链接(获取) // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param req body comm.ImgReqUploadReq true "签名上传url" // @Success 200 {string} "许可链接" // @Failure 400 {object} md.Response "具体错误" // @Router /api/v1/comm/getOssUrl [POST] func GetOssUrl(c *gin.Context) { var args comm.ImgReqUploadReq err := c.ShouldBindJSON(&args) if err != nil { err = svc.HandleValidateErr(err) err1 := err.(e.E) e.OutErr(c, err1.Code, err1.Error()) return } sysCfgDb := sys_cfg.NewSysCfgDb(db.Db) sysCfgs, err := sysCfgDb.SysCfgGetAll() if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } if sysCfgs == nil { e.OutErr(c, e.ERR_CFG_CACHE, nil) return } cfgMap := make(map[string]string, len(*sysCfgs)) for _, cfg := range *sysCfgs { cfgMap[cfg.Key] = cfg.Val } endpoint := cfgMap[enum2.AliyunOssEndpoint] bucketName := cfgMap[enum2.AliyunOssBucketName] ossBucketScheme := cfgMap[enum2.AliyunOssBucketScheme] accessKeyID := cfgMap[enum2.AliyunOssAccessKeyID] accessKeySecret := cfgMap[enum2.AliyunOssAccessKeySecret] // 创建OSSClient实例。 client, err := oss.New(ossBucketScheme+"://"+endpoint, accessKeyID, accessKeySecret) if err != nil { e.OutErr(c, e.ERR, err.Error()) return } // 获取存储空间。 bucket, err := client.Bucket(bucketName) if err != nil { e.OutErr(c, e.ERR, err.Error()) return } options := []oss.Option{ oss.ContentType(args.ContentType), } signedURL, err := bucket.SignURL(args.FileName, oss.HTTPPut, 60*5, options...) if err != nil { e.OutErr(c, e.ERR_AES_ENCODE, err.Error()) return } e.OutSuc(c, signedURL, nil) } // AccessRecords // @Summary 通用请求-访问记录-页面记录 // @Tags 访问记录 // @Description 页面记录 // @Accept json // @Produce json // @param Authorization header string true "验证参数Bearer和token空格拼接" // @Param req body comm.AccessRecordsReq true "页面标识" // @Success 200 {string} "success" // @Success 200 {string} "data exist" // @Failure 400 {object} md.Response "具体错误" // @Router /api/v1/comm/accessRecords [POST] func AccessRecords(c *gin.Context) { var req *comm.AccessRecordsReq if err1 := c.ShouldBindJSON(&req); err1 != nil { e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error()) return } user := svc.GetUser(c) date := time.Now().Format("2006-01-02") cacheKey := fmt.Sprintf(md.UserAccessRecordsKey, date, req.Index) if !cache.Exists(cacheKey) { ttl := 24 * 60 * 60 // 记录保存24小时 _, err := cache.SetEx(cacheKey, nil, ttl) if err != nil { e.OutErr(c, e.ERR, err.Error()) return } } get, err1 := cache.GetBit(cacheKey, user.Id) if err1 != nil || get == 0 { recordsDb := implement.NewEggAccessRecordsDb(db.Db) exist, err := recordsDb.EggAccessRecordsExist(user.Id, date, req.Index) if err != nil { e.OutErr(c, e.ERR_DB_ORM, nil) } if !exist { m := model.EggAccessRecords{ Uid: user.Id, PageIndex: req.Index, Date: date, } _, err = recordsDb.EggAccessRecordsInsert(&m) if err != nil { e.OutErr(c, e.ERR_DB_ORM, nil) return } } _, err = cache.SetBit(cacheKey, user.Id, 1) if err != nil { e.OutErr(c, e.ERR, err.Error()) return } } else { e.OutErr(c, e.ERR, errors.New("无效的重复请求").Error()) return } e.OutSuc(c, "success", nil) }