|
|
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中的内容写入响应
service.CouponUsers().ExportCouponUsers(r, req.CouponId, req.Jwcode, req.Name, req.PageNo, req.PageSize) }
|