修复商福通接口问题 & 新增套餐统一查询接口
This commit is contained in:
@@ -15,6 +15,176 @@ import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
// PageResource 分页查询当前用户长短效套餐
|
||||
func PageResource(c *fiber.Ctx) error {
|
||||
authCtx, err := auth.GetAuthCtx(c).PermitUser()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
req := new(PageResourceReq)
|
||||
if err := c.BodyParser(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
short := q.ResourceShort.As(q.Resource.Short.Name())
|
||||
long := q.ResourceLong.As(q.Resource.Long.Name())
|
||||
do := q.Resource.Where(q.Resource.UserID.Eq(authCtx.User.ID))
|
||||
if req.ResourceNo != nil && *req.ResourceNo != "" {
|
||||
do = do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo))
|
||||
}
|
||||
if req.Active != nil {
|
||||
do = do.Where(q.Resource.Active.Is(*req.Active))
|
||||
}
|
||||
if req.ResourceType != nil {
|
||||
do = do.Where(q.Resource.Type.Eq(*req.ResourceType))
|
||||
}
|
||||
if req.Type != nil {
|
||||
if req.ResourceType != nil {
|
||||
switch m.ResourceType(*req.ResourceType) {
|
||||
case m.ResourceTypeShort:
|
||||
do = do.Where(short.Type.Eq(*req.Type))
|
||||
case m.ResourceTypeLong:
|
||||
do = do.Where(long.Type.Eq(*req.Type))
|
||||
}
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(*req.Type),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(*req.Type),
|
||||
))
|
||||
}
|
||||
}
|
||||
if req.CreateAfter != nil {
|
||||
do = do.Where(q.Resource.CreatedAt.Gte(req.CreateAfter.UTC()))
|
||||
}
|
||||
if req.CreateBefore != nil {
|
||||
do = do.Where(q.Resource.CreatedAt.Lte(req.CreateBefore.UTC()))
|
||||
}
|
||||
if req.ExpireAfter != nil {
|
||||
if req.ResourceType != nil {
|
||||
switch m.ResourceType(*req.ResourceType) {
|
||||
case m.ResourceTypeShort:
|
||||
do = do.Where(short.ExpireAt.Gte(req.ExpireAfter.UTC()))
|
||||
case m.ResourceTypeLong:
|
||||
do = do.Where(long.ExpireAt.Gte(req.ExpireAfter.UTC()))
|
||||
}
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.ExpireAt.Gte(req.ExpireAfter.UTC()),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.ExpireAt.Gte(req.ExpireAfter.UTC()),
|
||||
))
|
||||
}
|
||||
}
|
||||
if req.ExpireBefore != nil {
|
||||
if req.ResourceType != nil {
|
||||
switch m.ResourceType(*req.ResourceType) {
|
||||
case m.ResourceTypeShort:
|
||||
do = do.Where(short.ExpireAt.Lte(req.ExpireBefore.UTC()))
|
||||
case m.ResourceTypeLong:
|
||||
do = do.Where(long.ExpireAt.Lte(req.ExpireBefore.UTC()))
|
||||
}
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.ExpireAt.Lte(req.ExpireBefore.UTC()),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.ExpireAt.Lte(req.ExpireBefore.UTC()),
|
||||
))
|
||||
}
|
||||
}
|
||||
if req.Status != nil {
|
||||
now := time.Now().UTC()
|
||||
switch *req.Status {
|
||||
case 1:
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeTime)),
|
||||
short.ExpireAt.Gte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeQuota)),
|
||||
short.Quota.GtCol(short.Used),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeTime)),
|
||||
long.ExpireAt.Gte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeQuota)),
|
||||
long.Quota.GtCol(long.Used),
|
||||
))
|
||||
case 2:
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeTime)),
|
||||
short.ExpireAt.Lte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeQuota)),
|
||||
short.Quota.LteCol(short.Used),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeTime)),
|
||||
long.ExpireAt.Lte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeQuota)),
|
||||
long.Quota.LteCol(long.Used),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
resource, err := q.Resource.Where(do).
|
||||
Joins(q.Resource.Short, q.Resource.Long).
|
||||
Order(q.Resource.CreatedAt.Desc()).
|
||||
Offset(req.GetOffset()).
|
||||
Limit(req.GetLimit()).
|
||||
Find()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var total int64
|
||||
if len(resource) < req.GetLimit() {
|
||||
total = int64(len(resource) + req.GetOffset())
|
||||
} else {
|
||||
total, err = q.Resource.
|
||||
Joins(q.Resource.Short, q.Resource.Long).
|
||||
Where(do).
|
||||
Count()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return c.JSON(core.PageResp{
|
||||
Total: int(total),
|
||||
Page: req.GetPage(),
|
||||
Size: req.GetSize(),
|
||||
List: resource,
|
||||
})
|
||||
}
|
||||
|
||||
type PageResourceReq struct {
|
||||
core.PageReq
|
||||
ResourceNo *string `json:"resource_no"`
|
||||
Active *bool `json:"active"`
|
||||
ResourceType *int `json:"resource_type"` // 1 - 短效动态,2 - 长效动态
|
||||
Type *int `json:"type"` // 1 - 包时,2 - 包量
|
||||
CreateAfter *time.Time `json:"create_after"`
|
||||
CreateBefore *time.Time `json:"create_before"`
|
||||
ExpireAfter *time.Time `json:"expire_after"`
|
||||
ExpireBefore *time.Time `json:"expire_before"`
|
||||
Status *int `json:"status"` // 0 - 全部,1 - 有效,2 - 过期
|
||||
}
|
||||
|
||||
// PageResourceShort 分页查询当前用户短效套餐
|
||||
func PageResourceShort(c *fiber.Ctx) error {
|
||||
// 检查权限
|
||||
@@ -209,6 +379,148 @@ type PageResourceLongReq struct {
|
||||
Status *int `json:"status"` // 0 - 全部,1 - 有效,2 - 过期
|
||||
}
|
||||
|
||||
// PageResourceByAdmin 分页查询全部长短效套餐
|
||||
func PageResourceByAdmin(c *fiber.Ctx) error {
|
||||
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeResourceRead)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var req PageResourceByAdminReq
|
||||
if err = g.Validator.ParseBody(c, &req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
short := q.ResourceShort.As("Short")
|
||||
long := q.ResourceLong.As("Long")
|
||||
do := q.Resource.Where()
|
||||
if req.UserPhone != nil {
|
||||
do = do.Where(q.User.As("User").Phone.Eq(*req.UserPhone))
|
||||
}
|
||||
if req.ResourceNo != nil {
|
||||
do = do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo))
|
||||
}
|
||||
if req.Active != nil {
|
||||
do = do.Where(q.Resource.Active.Is(*req.Active))
|
||||
}
|
||||
if req.ResourceType != nil {
|
||||
do = do.Where(q.Resource.Type.Eq(*req.ResourceType))
|
||||
}
|
||||
if req.Mode != nil {
|
||||
if req.ResourceType != nil {
|
||||
switch m.ResourceType(*req.ResourceType) {
|
||||
case m.ResourceTypeShort:
|
||||
do = do.Where(short.Type.Eq(*req.Mode))
|
||||
case m.ResourceTypeLong:
|
||||
do = do.Where(long.Type.Eq(*req.Mode))
|
||||
}
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(*req.Mode),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(*req.Mode),
|
||||
))
|
||||
}
|
||||
}
|
||||
if req.CreatedAtStart != nil {
|
||||
do = do.Where(q.Resource.CreatedAt.Gte(req.CreatedAtStart.UTC()))
|
||||
}
|
||||
if req.CreatedAtEnd != nil {
|
||||
do = do.Where(q.Resource.CreatedAt.Lte(req.CreatedAtEnd.UTC()))
|
||||
}
|
||||
if req.Expired != nil {
|
||||
now := time.Now().UTC()
|
||||
if *req.Expired {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeTime)),
|
||||
short.ExpireAt.Lte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeQuota)),
|
||||
short.Quota.LteCol(short.Used),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeTime)),
|
||||
long.ExpireAt.Lte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeQuota)),
|
||||
long.Quota.LteCol(long.Used),
|
||||
))
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeTime)),
|
||||
short.ExpireAt.Gt(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeQuota)),
|
||||
short.Quota.GtCol(short.Used),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeTime)),
|
||||
long.ExpireAt.Gt(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeQuota)),
|
||||
long.Quota.GtCol(long.Used),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
list, total, err := q.Resource.
|
||||
Joins(q.Resource.User, q.Resource.Short, q.Resource.Long, q.Resource.Short.Sku, q.Resource.Long.Sku).
|
||||
Select(
|
||||
q.Resource.ALL,
|
||||
q.User.As("User").Phone.As("User__phone"),
|
||||
q.User.As("User").Name.As("User__name"),
|
||||
short.Type.As("Short__type"),
|
||||
short.Live.As("Short__live"),
|
||||
short.Quota.As("Short__quota"),
|
||||
short.Used.As("Short__used"),
|
||||
short.Daily.As("Short__daily"),
|
||||
short.LastAt.As("Short__last_at"),
|
||||
short.ExpireAt.As("Short__expire_at"),
|
||||
q.ProductSku.As("Short__Sku").Name.As("Short__Sku__name"),
|
||||
long.Type.As("Long__type"),
|
||||
long.Live.As("Long__live"),
|
||||
long.Quota.As("Long__quota"),
|
||||
long.Used.As("Long__used"),
|
||||
long.Daily.As("Long__daily"),
|
||||
long.LastAt.As("Long__last_at"),
|
||||
long.ExpireAt.As("Long__expire_at"),
|
||||
q.ProductSku.As("Long__Sku").Name.As("Long__Sku__name"),
|
||||
).
|
||||
Where(do).
|
||||
Order(q.Resource.CreatedAt.Desc()).
|
||||
FindByPage(req.GetOffset(), req.GetLimit())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(core.PageResp{
|
||||
List: list,
|
||||
Total: int(total),
|
||||
Page: req.GetPage(),
|
||||
Size: req.GetSize(),
|
||||
})
|
||||
}
|
||||
|
||||
type PageResourceByAdminReq struct {
|
||||
core.PageReq
|
||||
UserPhone *string `json:"user_phone" form:"user_phone"`
|
||||
ResourceNo *string `json:"resource_no" form:"resource_no"`
|
||||
Active *bool `json:"active" form:"active"`
|
||||
ResourceType *int `json:"resource_type" form:"resource_type"`
|
||||
Mode *int `json:"mode" form:"mode"`
|
||||
CreatedAtStart *time.Time `json:"created_at_start" form:"created_at_start"`
|
||||
CreatedAtEnd *time.Time `json:"created_at_end" form:"created_at_end"`
|
||||
Expired *bool `json:"expired" form:"expired"`
|
||||
}
|
||||
|
||||
// PageResourceShortByAdmin 分页查询全部短效套餐
|
||||
func PageResourceShortByAdmin(c *fiber.Ctx) error {
|
||||
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeResourceShortRead)
|
||||
@@ -393,6 +705,145 @@ type PageResourceLongByAdminReq struct {
|
||||
Expired *bool `json:"expired" form:"expired"`
|
||||
}
|
||||
|
||||
// PageResourceOfUserByAdmin 分页查询指定用户的长短效套餐
|
||||
func PageResourceOfUserByAdmin(c *fiber.Ctx) error {
|
||||
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeResourceReadOfUser)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var req PageResourceOfUserByAdminReq
|
||||
if err = g.Validator.ParseBody(c, &req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
short := q.ResourceShort.As("Short")
|
||||
long := q.ResourceLong.As("Long")
|
||||
do := q.Resource.Where(q.Resource.UserID.Eq(req.UserID))
|
||||
if req.ResourceNo != nil {
|
||||
do = do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo))
|
||||
}
|
||||
if req.Active != nil {
|
||||
do = do.Where(q.Resource.Active.Is(*req.Active))
|
||||
}
|
||||
if req.ResourceType != nil {
|
||||
do = do.Where(q.Resource.Type.Eq(*req.ResourceType))
|
||||
}
|
||||
if req.Mode != nil {
|
||||
if req.ResourceType != nil {
|
||||
switch m.ResourceType(*req.ResourceType) {
|
||||
case m.ResourceTypeShort:
|
||||
do = do.Where(short.Type.Eq(*req.Mode))
|
||||
case m.ResourceTypeLong:
|
||||
do = do.Where(long.Type.Eq(*req.Mode))
|
||||
}
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(*req.Mode),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(*req.Mode),
|
||||
))
|
||||
}
|
||||
}
|
||||
if req.CreatedAtStart != nil {
|
||||
do = do.Where(q.Resource.CreatedAt.Gte(req.CreatedAtStart.UTC()))
|
||||
}
|
||||
if req.CreatedAtEnd != nil {
|
||||
do = do.Where(q.Resource.CreatedAt.Lte(req.CreatedAtEnd.UTC()))
|
||||
}
|
||||
if req.Expired != nil {
|
||||
now := time.Now().UTC()
|
||||
if *req.Expired {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeTime)),
|
||||
short.ExpireAt.Lte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeQuota)),
|
||||
short.Quota.LteCol(short.Used),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeTime)),
|
||||
long.ExpireAt.Lte(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeQuota)),
|
||||
long.Quota.LteCol(long.Used),
|
||||
))
|
||||
} else {
|
||||
do = do.Where(q.Resource.Where(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeTime)),
|
||||
short.ExpireAt.Gt(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeShort)),
|
||||
short.Type.Eq(int(m.ResourceModeQuota)),
|
||||
short.Quota.GtCol(short.Used),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeTime)),
|
||||
long.ExpireAt.Gt(now),
|
||||
).Or(
|
||||
q.Resource.Type.Eq(int(m.ResourceTypeLong)),
|
||||
long.Type.Eq(int(m.ResourceModeQuota)),
|
||||
long.Quota.GtCol(long.Used),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
list, total, err := q.Resource.
|
||||
Joins(q.Resource.User, q.Resource.Short, q.Resource.Long, q.Resource.Short.Sku, q.Resource.Long.Sku).
|
||||
Select(
|
||||
q.Resource.ALL,
|
||||
q.User.As("User").Phone.As("User__phone"),
|
||||
q.User.As("User").Name.As("User__name"),
|
||||
short.Type.As("Short__type"),
|
||||
short.Live.As("Short__live"),
|
||||
short.Quota.As("Short__quota"),
|
||||
short.Used.As("Short__used"),
|
||||
short.Daily.As("Short__daily"),
|
||||
short.LastAt.As("Short__last_at"),
|
||||
short.ExpireAt.As("Short__expire_at"),
|
||||
q.ProductSku.As("Short__Sku").Name.As("Short__Sku__name"),
|
||||
long.Type.As("Long__type"),
|
||||
long.Live.As("Long__live"),
|
||||
long.Quota.As("Long__quota"),
|
||||
long.Used.As("Long__used"),
|
||||
long.Daily.As("Long__daily"),
|
||||
long.LastAt.As("Long__last_at"),
|
||||
long.ExpireAt.As("Long__expire_at"),
|
||||
q.ProductSku.As("Long__Sku").Name.As("Long__Sku__name"),
|
||||
).
|
||||
Where(do).
|
||||
Order(q.Resource.CreatedAt.Desc()).
|
||||
FindByPage(req.GetOffset(), req.GetLimit())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(core.PageResp{
|
||||
List: list,
|
||||
Total: int(total),
|
||||
Page: req.GetPage(),
|
||||
Size: req.GetSize(),
|
||||
})
|
||||
}
|
||||
|
||||
type PageResourceOfUserByAdminReq struct {
|
||||
core.PageReq
|
||||
UserID int32 `json:"user_id" validate:"required"`
|
||||
ResourceNo *string `json:"resource_no"`
|
||||
Active *bool `json:"active"`
|
||||
ResourceType *int `json:"resource_type"`
|
||||
Mode *int `json:"mode"`
|
||||
CreatedAtStart *time.Time `json:"created_at_start"`
|
||||
CreatedAtEnd *time.Time `json:"created_at_end"`
|
||||
Expired *bool `json:"expired"`
|
||||
}
|
||||
|
||||
// PageResourceShortOfUserByAdmin 分页查询指定用户的短效套餐
|
||||
func PageResourceShortOfUserByAdmin(c *fiber.Ctx) error {
|
||||
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeResourceShortReadOfUser)
|
||||
|
||||
Reference in New Issue
Block a user