蛋蛋星球-客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

hdl_comm.go 4.2 KiB

1ヶ月前
4週間前
4週間前
1週間前
1ヶ月前
4週間前
1ヶ月前
1ヶ月前
4週間前
1ヶ月前
4週間前
1ヶ月前
3週間前
1ヶ月前
4週間前
1週間前
1ヶ月前
4週間前
1ヶ月前
4週間前
1ヶ月前
4週間前
1ヶ月前
4週間前
1ヶ月前
4週間前
1ヶ月前
4週間前
3週間前
4週間前
1ヶ月前
4週間前
1週間前
4週間前
4週間前
4週間前
1週間前
1週間前
1週間前
1週間前
1週間前
1週間前
4週間前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package comm
  2. import (
  3. "applet/app/db"
  4. "applet/app/e"
  5. "applet/app/md"
  6. "applet/app/md/comm"
  7. "applet/app/svc"
  8. "applet/app/svc/sys_cfg"
  9. "applet/app/utils/cache"
  10. "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
  11. "code.fnuoos.com/EggPlanet/egg_models.git/src/model"
  12. enum2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/enum"
  13. "fmt"
  14. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  15. "github.com/gin-gonic/gin"
  16. "time"
  17. )
  18. // GetOssUrl
  19. // @Summary 通用请求-对象存储-上传许可链接(获取)
  20. // @Tags 对象存储
  21. // @Description 上传许可链接(获取)
  22. // @Accept json
  23. // @Produce json
  24. // @param Authorization header string true "验证参数Bearer和token空格拼接"
  25. // @Param req body comm.ImgReqUploadReq true "签名上传url"
  26. // @Success 200 {string} "许可链接"
  27. // @Failure 400 {object} md.Response "具体错误"
  28. // @Router /api/v1/comm/getOssUrl [POST]
  29. func GetOssUrl(c *gin.Context) {
  30. var args comm.ImgReqUploadReq
  31. err := c.ShouldBindJSON(&args)
  32. if err != nil {
  33. err = svc.HandleValidateErr(err)
  34. err1 := err.(e.E)
  35. e.OutErr(c, err1.Code, err1.Error())
  36. return
  37. }
  38. sysCfgDb := sys_cfg.NewSysCfgDb(db.Db)
  39. sysCfgs, err := sysCfgDb.SysCfgGetAll()
  40. if err != nil {
  41. e.OutErr(c, e.ERR_DB_ORM, err.Error())
  42. return
  43. }
  44. if sysCfgs == nil {
  45. e.OutErr(c, e.ERR_CFG_CACHE, nil)
  46. return
  47. }
  48. cfgMap := make(map[string]string, len(*sysCfgs))
  49. for _, cfg := range *sysCfgs {
  50. cfgMap[cfg.Key] = cfg.Val
  51. }
  52. endpoint := cfgMap[enum2.AliyunOssEndpoint]
  53. bucketName := cfgMap[enum2.AliyunOssBucketName]
  54. ossBucketScheme := cfgMap[enum2.AliyunOssBucketScheme]
  55. accessKeyID := cfgMap[enum2.AliyunOssAccessKeyID]
  56. accessKeySecret := cfgMap[enum2.AliyunOssAccessKeySecret]
  57. // 创建OSSClient实例。
  58. client, err := oss.New(ossBucketScheme+"://"+endpoint, accessKeyID, accessKeySecret)
  59. if err != nil {
  60. e.OutErr(c, e.ERR, err.Error())
  61. return
  62. }
  63. // 获取存储空间。
  64. bucket, err := client.Bucket(bucketName)
  65. if err != nil {
  66. e.OutErr(c, e.ERR, err.Error())
  67. return
  68. }
  69. options := []oss.Option{
  70. oss.ContentType(args.ContentType),
  71. }
  72. signedURL, err := bucket.SignURL(args.FileName, oss.HTTPPut, 60*5, options...)
  73. if err != nil {
  74. e.OutErr(c, e.ERR_AES_ENCODE, err.Error())
  75. return
  76. }
  77. e.OutSuc(c, signedURL, nil)
  78. }
  79. // AccessRecords
  80. // @Summary 通用请求-访问记录-页面记录
  81. // @Tags 访问记录
  82. // @Description 页面记录
  83. // @Accept json
  84. // @Produce json
  85. // @param Authorization header string true "验证参数Bearer和token空格拼接"
  86. // @Param req body comm.AccessRecordsReq true "页面标识"
  87. // @Success 200 {string} "success"
  88. // @Success 200 {string} "data exist"
  89. // @Failure 400 {object} md.Response "具体错误"
  90. // @Router /api/v1/comm/accessRecords [POST]
  91. func AccessRecords(c *gin.Context) {
  92. var req *comm.AccessRecordsReq
  93. if err1 := c.ShouldBindJSON(&req); err1 != nil {
  94. e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
  95. return
  96. }
  97. user := svc.GetUser(c)
  98. date := time.Now().Format("2006-01-02")
  99. cacheKey := fmt.Sprintf(md.UserAccessRecordsKey, date, req.Index)
  100. if !cache.Exists(cacheKey) {
  101. ttl := 24 * 60 * 60 // 记录保存24小时
  102. _, err := cache.SetEx(cacheKey, nil, ttl)
  103. if err != nil {
  104. e.OutErr(c, e.ERR, err.Error())
  105. return
  106. }
  107. }
  108. get, err1 := cache.GetBit(cacheKey, user.Id)
  109. if err1 != nil || get == 0 {
  110. // 更新页面记录
  111. recordsDb := implement.NewEggAccessRecordsDb(db.Db)
  112. exist, err := recordsDb.EggAccessRecordsExist(user.Id, date, req.Index)
  113. if err != nil {
  114. e.OutErr(c, e.ERR_DB_ORM, nil)
  115. }
  116. if !exist {
  117. m := model.EggAccessRecords{
  118. Uid: user.Id,
  119. PageIndex: req.Index,
  120. Date: date,
  121. }
  122. _, err = recordsDb.EggAccessRecordsInsert(&m)
  123. if err != nil {
  124. e.OutErr(c, e.ERR_DB_ORM, nil)
  125. return
  126. }
  127. }
  128. _, err = cache.SetBit(cacheKey, user.Id, 1)
  129. if err != nil {
  130. e.OutErr(c, e.ERR, err.Error())
  131. return
  132. }
  133. // 更新浏览记录总表
  134. year, week := time.Now().ISOWeek()
  135. totalDb := implement.NewEggAccessTotalDb(db.Db)
  136. _, err = totalDb.EggAccessTotalAddOrDefault(user.Id, year, week)
  137. if err != nil {
  138. e.OutErr(c, e.ERR_DB_ORM, err.Error())
  139. return
  140. }
  141. }
  142. e.OutSuc(c, "success", nil)
  143. }