Browse Source

12.28日下午查看拥有卡券的用户添加分页,操作表时会更新redis

master
lijikun 6 months ago
parent
commit
4fc9b980c5
  1. 2
      api/v1/couponusers/couponUsers.go
  2. 2
      internal/controller/couponusers/couponUsers.go
  3. 187
      internal/logic/couponusers/couponUsers.go
  4. 4
      internal/service/couponusers.go

2
api/v1/couponusers/couponUsers.go

@ -4,6 +4,8 @@ type GetCouponUsersReq struct {
CouponId int `json:"couponId" dc:"卡券id"`
Jwcode int `json:"jwcode" dc:"查询条件中的精网号"`
Name string `json:"name" dc:"查询条件中的名字"`
PageNo int `json:"pageNo" dc:"页码"`
PageSize int `json:"pageSize" dc:"每页数量"`
}
type GetCouponUsersRes struct {

2
internal/controller/couponusers/couponUsers.go

@ -23,7 +23,7 @@ func (c *CouponUsers) GetCouponUsers(r *ghttp.Request) {
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)
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()))

187
internal/logic/couponusers/couponUsers.go

@ -24,71 +24,116 @@ func init() {
}
// 根据优惠券id查看拥有优惠券的用户
func (s *sCouponUsers) GetCouponUsersByCondition(ctx context.Context, couponId, jwcode int, name string) (users []couponusers.GetCouponUsersRes, err error) { //待解释
//从redis中获取所有数据但暂时不返回, 用于条件查询
value, _ := g.Redis().Get(ctx, fmt.Sprintf("%d CouponUsers", couponId))
//redis中有数据
if value.String() != "" {
err = json.Unmarshal(value.Bytes(), &users)
if err != nil {
return nil, errors.New("redis中数据解析失败")
}
} else { //redis中没有数据
//没有从redis中获取成功,从数据库中查询,并存储到redis中
/*查询所有数据*/
//在coupon_users中查询出对应的jwcode
err = dao.CouponUsers.Ctx(ctx).Fields("jwcode").
Where("coupon_id = ", couponId).Scan(&users)
if err != nil {
return nil, errors.New("根据卡券id搜索jwcode失败")
}
//根据jwcode查询用户信息
for i, userInfo := range users {
err = dao.MemberInfo.Ctx(ctx).Fields("jwcode", "name", "deptName", "shopName").
Where("jwcode = ?", userInfo.Jwcode).Scan(&users[i])
func (s *sCouponUsers) GetCouponUsersByCondition(ctx context.Context, couponId, jwcode int, name string, pageNo, pageSize int) (users []couponusers.GetCouponUsersRes, err error) {
//没有条件查询时,分页
if jwcode == 0 && name == "" {
//从redis中获取当前分页数据
value, _ := g.Redis().Get(ctx, fmt.Sprintf("%d %d-%d CouponUsers", couponId, pageNo, pageSize))
//redis中有数据
if value.String() != "" {
err = json.Unmarshal(value.Bytes(), &users)
if err != nil {
return nil, errors.New("根据jwcode搜索用户信息失败")
return nil, errors.New("redis中数据解析失败")
}
return users, err
} else { //redis中没有数据
//没有从redis中获取成功,从数据库中查询,并存储到redis中
/*查询所有数据*/
//在coupon_users中查询出对应的jwcode
err = dao.CouponUsers.Ctx(ctx).Fields("jwcode").
Where("coupon_id = ", couponId).Page(pageNo, pageSize).Scan(&users)
if err != nil {
return nil, errors.New("根据卡券id搜索jwcode失败")
}
//根据jwcode查询用户信息
for i, userInfo := range users {
err = dao.MemberInfo.Ctx(ctx).Fields("jwcode", "name", "deptName", "shopName").
Where("jwcode = ?", userInfo.Jwcode).Scan(&users[i])
if err != nil {
return nil, errors.New("根据jwcode搜索用户信息失败")
}
}
/*查询所有数据*/
//将数据存入redis
UsersMarshal, _ := json.Marshal(users)
_, err = g.Redis().Set(ctx, fmt.Sprintf("%d %d-%d CouponUsers", couponId, pageNo, pageSize), UsersMarshal)
if err != nil {
return nil, errors.New("将数据存入redis失败")
}
}
/*查询所有数据*/
//将数据存入redis
UsersMarshal, _ := json.Marshal(users)
_, err = g.Redis().Set(ctx, fmt.Sprintf("%d CouponUsers", couponId), UsersMarshal)
if err != nil {
return nil, errors.New("将数据存入redis失败")
}
}
return users, err
//有条件查询时,不在分页,全查后筛选
} else {
//条件查询
if jwcode != 0 && name == "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if user.Jwcode == jwcode {
result = append(result, user)
//从redis中获取所有数据但暂时不返回, 用于条件查询
value, _ := g.Redis().Get(ctx, fmt.Sprintf("%d CouponUsers", couponId))
//redis中有数据
if value.String() != "" {
err = json.Unmarshal(value.Bytes(), &users)
if err != nil {
return nil, errors.New("redis中数据解析失败")
}
}
return result, err
} else if jwcode == 0 && name != "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if strings.Contains(user.Name, name) {
result = append(result, user)
} else { //redis中没有数据
//没有从redis中获取成功,从数据库中查询,并存储到redis中
/*查询所有数据*/
//在coupon_users中查询出对应的jwcode
err = dao.CouponUsers.Ctx(ctx).Fields("jwcode").
Where("coupon_id = ", couponId).Scan(&users)
if err != nil {
return nil, errors.New("根据卡券id搜索jwcode失败")
}
//根据jwcode查询用户信息
for i, userInfo := range users {
err = dao.MemberInfo.Ctx(ctx).Fields("jwcode", "name", "deptName", "shopName").
Where("jwcode = ?", userInfo.Jwcode).Scan(&users[i])
if err != nil {
return nil, errors.New("根据jwcode搜索用户信息失败")
}
}
/*查询所有数据*/
//将数据存入redis
UsersMarshal, _ := json.Marshal(users)
_, err = g.Redis().Set(ctx, fmt.Sprintf("%d CouponUsers", couponId), UsersMarshal)
if err != nil {
return nil, errors.New("将数据存入redis失败")
}
}
return result, err
} else if jwcode != 0 && name != "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if user.Jwcode == jwcode && strings.Contains(user.Name, name) {
result = append(result, user)
//条件查询
if jwcode != 0 && name == "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if user.Jwcode == jwcode {
result = append(result, user)
}
}
return result, err
} else if jwcode == 0 && name != "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if strings.Contains(user.Name, name) {
result = append(result, user)
}
}
return result, err
} else if jwcode != 0 && name != "" {
var result []couponusers.GetCouponUsersRes
for _, user := range users {
if user.Jwcode == jwcode && strings.Contains(user.Name, name) {
result = append(result, user)
}
}
return result, err
}
return result, err
}
return users, err
return users, err
}
}
// 根据jwcode,优惠券id删除用户
@ -103,6 +148,16 @@ func (s *sCouponUsers) DeleteCouponUserByJwcode(ctx context.Context, couponId, j
if err != nil {
return nil, errors.New("删除用户失败")
}
//删除redis中的数据
_, err = g.Redis().Del(ctx, fmt.Sprintf("%d CouponUsers", couponId))
if err != nil {
return nil, errors.New("删除redis中的数据失败")
}
keys, err := g.Redis().Keys(ctx, fmt.Sprintf("%d *-* CouponUsers", couponId))
if len(keys) > 0 {
_, err = g.Redis().Del(ctx, keys...)
}
return result, err
}
@ -197,6 +252,16 @@ func (s *sCouponUsers) InsertCouponUsersByJwcodes(ctx context.Context, jwcodes [
}
}
//删除redis中的数据
_, err = g.Redis().Del(ctx, fmt.Sprintf("%d CouponUsers", couponId))
if err != nil {
return 0, errors.New("删除redis中的数据失败")
}
keys, err := g.Redis().Keys(ctx, fmt.Sprintf("%d *-* CouponUsers", couponId))
if len(keys) > 0 {
_, err = g.Redis().Del(ctx, keys...)
}
return num, err //返回受影响的行数,即新增的条数
}
@ -348,6 +413,17 @@ func (s *sCouponUsers) IssueCouponToUser(ctx context.Context, jwcode, couponId i
if err != nil {
return errors.New("插入数据库失败")
}
//删除redis中的数据
_, err = g.Redis().Del(ctx, fmt.Sprintf("%d CouponUsers", couponId))
if err != nil {
return errors.New("删除redis中的数据失败")
}
keys, err := g.Redis().Keys(ctx, fmt.Sprintf("%d *-* CouponUsers", couponId))
if len(keys) > 0 {
_, err = g.Redis().Del(ctx, keys...)
}
return err
}
}
@ -356,6 +432,11 @@ func (s *sCouponUsers) IssueCouponToUser(ctx context.Context, jwcode, couponId i
}
// 导出拥有卡券的用户列表
func (s *sCouponUsers) ExportCouponUsers() {
}
// 添加用户选择武器记录
func (s *sCouponUsers) AddRecord(ctx context.Context, jwcode int, id int, name string) (err error) {
_, err = dao.CouponUsers.Ctx(ctx).Data(g.Map{

4
internal/service/couponusers.go

@ -15,7 +15,7 @@ import (
type (
ICouponUsers interface {
// 根据优惠券id查看拥有优惠券的用户
GetCouponUsersByCondition(ctx context.Context, couponId int, jwcode int, name string) (users []couponusers.GetCouponUsersRes, err error)
GetCouponUsersByCondition(ctx context.Context, couponId int, jwcode int, name string, pageNo int, pageSize int) (users []couponusers.GetCouponUsersRes, err error)
// 根据jwcode,优惠券id删除用户
DeleteCouponUserByJwcode(ctx context.Context, couponId int, jwcode int) (result sql.Result, err error)
// 通过excel导入精网号
@ -28,6 +28,8 @@ type (
IsEligibleUser(ctx context.Context, jwcode int, couponIds []int) (img string, err error)
// 给单个用户发放卡券
IssueCouponToUser(ctx context.Context, jwcode int, couponId int) (err error)
// 导出拥有卡券的用户列表
ExportCouponUsers()
// 添加用户选择武器记录
AddRecord(ctx context.Context, jwcode int, id int, name string) (err error)
}

Loading…
Cancel
Save