package couponusers import ( "CouponBackendGo/api/v1/couponusers" "CouponBackendGo/internal/model/dto" "CouponBackendGo/internal/service" "CouponBackendGo/utility" "fmt" "github.com/gogf/gf/v2/net/ghttp" "mime/multipart" ) type CouponUsers struct{} func NewCouponUsers() *CouponUsers { return &CouponUsers{} } // 获取拥有卡券的用户列表 func (c *CouponUsers) GetCouponUsers(r *ghttp.Request) { //解析请求 var req *couponusers.GetCouponUsersReq if err := r.Parse(&req); err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } result, err := service.CouponUsers().GetCouponUsersByCondition(r.Context(), req.CouponId, req.Jwcode, req.Name, req.PageNo, req.PageSize) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //没有错误,但获取到了0条 if result == nil { r.Response.WriteJsonExit(dto.Error("没有符合条件的用户")) } //成功处理 r.Response.WriteJsonExit(dto.SuccessWithData(result)) } // 删除用户卡券 func (c *CouponUsers) DeleteCouponUserByJwcode(r *ghttp.Request) { // 解析请求 var req *couponusers.DelCouponUserByJwcodeReq if err := r.Parse(&req); err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } result, err := service.CouponUsers().DeleteCouponUserByJwcode(r.Context(), req.CouponId, req.Jwcode) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //获取影响到的数据条数 affected, err := result.RowsAffected() //没有错误,但删除0条 if affected == 0 { r.Response.WriteJsonExit(dto.Error("删除失败,删除了0条")) } //成功处理 r.Response.WriteJsonExit(dto.SuccessWithMsg("删除成功")) } // 接受前端传来的excel表格,并解析,返回jwcode切片,可以有重复的,在插入时进行验证,如果有重复的,只插入一次 func (c *CouponUsers) InsertCouponUserByExcel(r *ghttp.Request) { /*解析请求*/ var req *couponusers.InsertCouponUserReq if err := r.Parse(&req); err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } /*解析请求*/ // 从请求中获取文件 file, _, err := r.FormFile("excelFile") if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } // 延时关闭文件 defer func(file multipart.File) { err := file.Close() if err != nil { // 处理关闭文件时的错误 r.Response.WriteJsonExit(dto.Error("获取的文件关闭失败")) } }(file) //参数校验,检查文件是否为空 if file == nil { r.Response.WriteJsonExit(dto.Error("获取的文件为空")) } /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/ result, err := service.CouponUsers().InsertJwcodeByExcel(r.Context(), file, req.CouponId) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //没报错,但插入数据0条 if result == 0 { r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人")) } //成功处理 r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result))) /*调用方法解析excel文件,并将解析出结果传入另一个函数去发放卡券*/ } // 传入jwcodes字符串,解析并发放卡券 func (c *CouponUsers) InsertCouponUserByJwcodeStr(r *ghttp.Request) { // 解析请求 var req *couponusers.InsertCouponUserByJwcodeStrReq if err := r.Parse(&req); err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } result, err := service.CouponUsers().InsertCouponUsersByJwcodeStr(r.Context(), req.Jwcodes, req.CouponId) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //没报错,但插入数据0条 if result == 0 { r.Response.WriteJsonExit(dto.Error("发放失败,发放了0人")) } //成功处理 r.Response.WriteJsonExit(dto.SuccessWithMsg(fmt.Sprintf("发放成功,发放了%d人", result))) } /*近期使用*/ // 导入满足条件的用户jwcode到redis //不导入到redis了,导入到数据库表中 func (c *CouponUsers) InsertJwcodesToRedisByExcel(r *ghttp.Request) { // 从请求中获取文件 file, _, err := r.FormFile("EligibleJwcodesExcel") if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } // 延时关闭文件 defer func(file multipart.File) { err := file.Close() if err != nil { // 处理关闭文件时的错误 r.Response.WriteJsonExit(dto.Error("获取的文件关闭失败")) } }(file) //参数校验,检查文件是否为空 if file == nil { r.Response.WriteJsonExit(dto.Error("获取的文件为空")) } err = service.CouponUsers().InsertJwcodesToRedisByExcel(file) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //成功处理 //r.Response.WriteJsonExit(dto.SuccessWithMsg("导入redis成功")) r.Response.WriteJsonExit(dto.SuccessWithMsg("导入coupon_qualified_users表成功")) } // 判断某用户能否抽到卡券 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())) } /*解析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) { // 解析请求参数 var req *couponusers.IssueCouponUserReq if err := r.Parse(&req); err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //解析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())) } err = service.CouponUsers().IssueCouponToUser(r.Context(), jwcode, req.CouponId) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //成功处理 r.Response.WriteJsonExit(dto.SuccessWithMsg("发放成功")) } // 添加用户选择武器记录 func (c *CouponUsers) AddRecord(r *ghttp.Request) { var req *couponusers.AddRecordReq if err := r.Parse(&req); err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //解析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())) } err = service.CouponUsers().AddRecord(r.Context(), jwcode, req.CouponId, req.Name) //错误处理 if err != nil { r.Response.WriteJsonExit(dto.Error(err.Error())) } //成功处理 r.Response.WriteJsonExit(dto.SuccessWithMsg("记录成功")) } /*近期使用*/ // 未编写 // 导出拥有卡券的用户 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中的内容写入到响应 }