Browse Source

12.28日检测用户是否有抽奖机会,是否抽取过,

ljk
lijikun 6 months ago
parent
commit
b252850557
  1. 4
      api/v1/couponusers/couponUsers.go
  2. 3
      internal/cmd/cmd.go
  3. 3
      internal/consts/consts.go
  4. 45
      internal/controller/couponusers/couponUsers.go
  5. 52
      internal/logic/couponusers/couponUsers.go
  6. 1
      internal/logic/logic.go
  7. 10
      internal/logic/middleware/interceptor.go
  8. 2
      internal/service/couponusers.go
  9. 8
      internal/service/middleware.go

4
api/v1/couponusers/couponUsers.go

@ -26,3 +26,7 @@ type InsertCouponUserReq struct {
type IssueCouponUserReq struct {
CouponId int `json:"couponId" dc:"卡券id"`
}
type IsEligibleUserReq struct {
CouponIds []int `json:"couponIds" dc:"能抽出的卡券id"`
}

3
internal/cmd/cmd.go

@ -2,6 +2,7 @@ package cmd
import (
"CouponBackendGo/internal/controller/couponusers"
"CouponBackendGo/internal/logic/middleware"
"context"
"github.com/gogf/gf/v2/frame/g"
@ -17,12 +18,14 @@ var (
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
s := g.Server()
s.Group("/api/coupon_backend", func(group *ghttp.RouterGroup) {
group.Middleware(middleware.MiddlewareCORS)
group.POST("/get-coupon-users", couponusers.NewCouponUsers().GetCouponUsers) // 获取拥有卡券的用户列表
group.POST("/delete-coupon-user", couponusers.NewCouponUsers().DeleteCouponUserByJwcode) //删除用户卡券
group.POST("/import-excel", couponusers.NewCouponUsers().InsertJwcodeByExcel) // 通过excel导入jwcode
group.POST("/insert-coupon-user", couponusers.NewCouponUsers().InsertCouponUser) //给用户发放卡券
//近期使用
group.POST("/insert-users-to-redis", couponusers.NewCouponUsers().InsertJwcodesToRedisByExcel) //导入满足条件的用户jwcode到redis
group.POST("/is-eligible-user", couponusers.NewCouponUsers().IsEligibleUser) //判断用户是否满足领取条件
group.POST("/issue-coupon-to-users", couponusers.NewCouponUsers().IssueCouponUser) //给单个用户发放卡券
})
s.Run()

3
internal/consts/consts.go

@ -5,5 +5,6 @@ const (
//内容: http://39.101.133.168:8828/hljw
//测试环境解析token接口: http://39.101.133.168:8828/hljw/api/v2/member/info
//正式环境解析token接口: http://api.homilychart.com:8828/hljw/api/v2/member/info
URL_HASH_KEY = "HLJW_BASE_URL"
//URL_HASH_KEY = "HLJW_BASE_URL"
URL_HASH_KEY = "HLJW_URL"
)

45
internal/controller/couponusers/couponUsers.go

@ -142,9 +142,42 @@ func (c *CouponUsers) InsertJwcodesToRedisByExcel(r *ghttp.Request) {
}
// 判断某用户能否抽到卡券
func (c *CouponUsers) IsEligibleUser(r *ghttp.Request) {
// 解析请求
var req *couponusers.IsEligibleUserReq
if err := r.Parse(&req); err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error()))
}
fmt.Println(req.CouponIds)
/*解析token,获取jwcode*/
token := r.Header.Get("token")
if token == "" {
r.Response.WriteJsonExit(dto.Error("token为空"))
}
jwcode, err := utility.GetJwcodeJSON(token)
if err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error()))
}
/*解析token,获取jwcode*/
img, err := service.CouponUsers().IsEligibleUser(r.Context(), jwcode, req.CouponIds)
if err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error()))
}
if img != "" {
r.Response.WriteJsonExit(dto.SuccessWithMsgAndData("该用户已领取过该卡券", img))
}
r.Response.WriteJsonExit(dto.SuccessWithMsg("用户符合领取条件"))
}
// 给单个用户发放卡券
func (c *CouponUsers) IssueCouponUser(r *ghttp.Request) {
// 解析请求参数
//没有token,用于测试
//var req *couponusers.InsertCouponUserReq
//if err := r.Parse(&req); err != nil {
@ -184,5 +217,13 @@ func (c *CouponUsers) IssueCouponUser(r *ghttp.Request) {
/*近期使用*/
//未编写
//导出拥有卡券的用户
// 未编写
// 导出拥有卡券的用户
func (c *CouponUsers) ExportCouponUsers(r *ghttp.Request) {
var req *couponusers.GetCouponUsersReq
if err := r.Parse(&req); err != nil {
r.Response.WriteJsonExit(dto.Error(err.Error()))
}
//查询数据,创建excel文件,设置表头,写入数据,设置文件名,保存到缓冲区并返回,设置响应头,指定内容类型为excel文件,指定文件名为fileName,将buffer中的内容写入到响应
}

52
internal/logic/couponusers/couponUsers.go

@ -127,9 +127,9 @@ func (s *sCouponUsers) InsertJwcodeByExcel(file multipart.File) (jwcodes []int,
return nil, errors.New("没有工作表")
}
// 读取第一个工作表
sheetName := GetSheetMap[1]
//sheetName := GetSheetMap[1]
//rows, err := f.GetRows(f.GetSheetName(1))
rows, err := f.GetRows(sheetName)
rows, err := f.GetRows("Sheet1")
if err != nil {
return nil, err
}
@ -222,10 +222,11 @@ func (s *sCouponUsers) InsertJwcodesToRedisByExcel(file multipart.File) (err err
if len(GetSheetMap) == 0 {
return errors.New("没有工作表")
}
// 读取第一个工作表
sheetName := GetSheetMap[1]
//sheetName := GetSheetMap[1]
//rows, err := f.GetRows(f.GetSheetName(1))
rows, err := f.GetRows(sheetName)
rows, err := f.GetRows("Sheet1")
if err != nil {
return err
}
@ -267,6 +268,46 @@ func (s *sCouponUsers) InsertJwcodesToRedisByExcel(file multipart.File) (err err
return //返回nil表示成功
}
// 判断某用户能否抽到卡券
func (s *sCouponUsers) IsEligibleUser(ctx context.Context, jwcode int, couponIds []int) (img string, err error) {
/*从redis中获取符合条件的精网号EligibleJwcodes*/
redisResult, err := g.Redis().Get(ctx, "EligibleJwcodes")
if err != nil {
return "", errors.New("从redis中获取数据失败")
}
var EligibleJwcodes []int
err = json.Unmarshal(redisResult.Bytes(), &EligibleJwcodes)
if err != nil {
return "", errors.New("redis中数据解析失败")
}
if len(EligibleJwcodes) == 0 {
return "", errors.New("redis中数据为空")
}
/*从redis中获取符合条件的精网号EligibleJwcodes*/
//检查jwcode是否在EligibleJwcodes中
for _, EligibleJwcode := range EligibleJwcodes {
if EligibleJwcode == jwcode {
//存在,有资格,判断是否抽取过
for _, couponId := range couponIds {
count, err := dao.CouponUsers.Ctx(ctx).Where("jwcode = ?", jwcode).Where("coupon_id = ?", couponId).Count()
if err != nil {
return "", errors.New("检索数据库中是否已存在数据失败")
}
//有记录,抽取过
if count > 0 {
err = dao.CouponUsers.Ctx(ctx).Fields("img_url").Where("jwcode = ?", jwcode).Where("coupon_id = ?", couponId).Scan(&img)
return img, errors.New("该用户已领取过该卡券")
}
}
//所有的都没有记录,没有抽取过
return "", nil
}
}
return "", errors.New("该用户不满足领取条件")
}
// 给单个用户发放卡券
func (s *sCouponUsers) IssueCouponToUser(ctx context.Context, jwcode, couponId int) (err error) {
//查看库中是否已经存在
@ -290,6 +331,9 @@ func (s *sCouponUsers) IssueCouponToUser(ctx context.Context, jwcode, couponId i
if err != nil {
return errors.New("redis中数据解析失败")
}
if len(EligibleJwcodes) == 0 {
return errors.New("redis中数据为空")
}
/*从redis中获取符合条件的精网号EligibleJwcodes*/
//检查jwcode是否在EligibleJwcodes中

1
internal/logic/logic.go

@ -6,4 +6,5 @@ package logic
import (
_ "CouponBackendGo/internal/logic/couponusers"
_ "CouponBackendGo/internal/logic/middleware"
)

10
internal/logic/middleware/interceptor.go

@ -0,0 +1,10 @@
package middleware
import (
"github.com/gogf/gf/v2/net/ghttp"
)
func MiddlewareCORS(r *ghttp.Request) {
r.Response.CORSDefault()
r.Middleware.Next()
}

2
internal/service/couponusers.go

@ -24,6 +24,8 @@ type (
InsertCouponUsersByJwcodes(ctx context.Context, jwcodes []int, couponId int) (num int, err error)
// 导入满足条件的用户jwcode到redis
InsertJwcodesToRedisByExcel(file multipart.File) (err error)
// 判断某用户能否抽到卡券
IsEligibleUser(ctx context.Context, jwcode int, couponIds []int) (img string, err error)
// 给单个用户发放卡券
IssueCouponToUser(ctx context.Context, jwcode int, couponId int) (err error)
}

8
internal/service/middleware.go

@ -0,0 +1,8 @@
// ================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================
package service
type ()
Loading…
Cancel
Save