130 lines
3.1 KiB
Go
130 lines
3.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"platform/pkg/u"
|
|
"platform/web/auth"
|
|
"platform/web/core"
|
|
c "platform/web/core"
|
|
g "platform/web/globals"
|
|
q "platform/web/queries"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// PageBatch 分页查询套餐提取记录
|
|
func PageBatch(ctx *fiber.Ctx) error {
|
|
// 检查权限
|
|
authCtx, err := auth.GetAuthCtx(ctx).PermitUser()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 解析请求参数
|
|
req := new(PageResourceBatchReq)
|
|
if err := g.Validator.ParseBody(ctx, req); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 查询批次
|
|
conds := q.LogsUserUsage.Where(q.LogsUserUsage.UserID.Eq(authCtx.User.ID))
|
|
if req.TimeStart != nil {
|
|
conds.Where(q.LogsUserUsage.Time.Gte(*req.TimeStart))
|
|
}
|
|
if req.TimeEnd != nil {
|
|
conds.Where(q.LogsUserUsage.Time.Lte(*req.TimeEnd))
|
|
}
|
|
|
|
list, total, err := q.LogsUserUsage.Where(conds).
|
|
Order(q.LogsUserUsage.Time.Desc()).
|
|
FindByPage(req.GetOffset(), req.GetLimit())
|
|
if err != nil {
|
|
return core.NewBizErr("获取数据失败", err)
|
|
}
|
|
|
|
// 返回数据
|
|
return ctx.JSON(c.PageResp{
|
|
Total: int(total),
|
|
List: list,
|
|
Page: req.GetPage(),
|
|
Size: req.GetSize(),
|
|
})
|
|
}
|
|
|
|
type PageResourceBatchReq struct {
|
|
c.PageReq
|
|
TimeStart *time.Time `json:"time_start"`
|
|
TimeEnd *time.Time `json:"time_end"`
|
|
}
|
|
|
|
// PageBatchByAdmin 分页查询所有提取记录
|
|
func PageBatchByAdmin(c *fiber.Ctx) error {
|
|
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeBatchRead)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var req PageBatchByAdminReq
|
|
if err = g.Validator.ParseBody(c, &req); err != nil {
|
|
return err
|
|
}
|
|
|
|
do := q.LogsUserUsage.Where()
|
|
if req.UserPhone != nil {
|
|
do = do.Where(q.User.Phone.Eq(*req.UserPhone))
|
|
}
|
|
if req.ResourceNo != nil {
|
|
do = do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo))
|
|
}
|
|
if req.BatchNo != nil {
|
|
do = do.Where(q.LogsUserUsage.BatchNo.Eq(*req.BatchNo))
|
|
}
|
|
if req.Prov != nil {
|
|
do = do.Where(q.LogsUserUsage.Prov.Eq(*req.Prov))
|
|
}
|
|
if req.City != nil {
|
|
do = do.Where(q.LogsUserUsage.City.Eq(*req.City))
|
|
}
|
|
if req.Isp != nil {
|
|
do = do.Where(q.LogsUserUsage.ISP.Eq(*req.Isp))
|
|
}
|
|
if req.CreatedAtStart != nil {
|
|
time := u.DateHead(*req.CreatedAtStart)
|
|
do = do.Where(q.LogsUserUsage.Time.Gte(time))
|
|
}
|
|
if req.CreatedAtEnd != nil {
|
|
time := u.DateTail(*req.CreatedAtEnd)
|
|
do = do.Where(q.LogsUserUsage.Time.Lte(time))
|
|
}
|
|
|
|
list, total, err := q.LogsUserUsage.
|
|
Joins(q.LogsUserUsage.User, q.LogsUserUsage.Resource).
|
|
Select(
|
|
q.LogsUserUsage.ALL,
|
|
q.User.As("User").Phone.As("User__phone"),
|
|
q.User.As("User").Name.As("User__name"),
|
|
q.Resource.As("Resource").ResourceNo.As("Resource__resource_no"),
|
|
).
|
|
Where(do).
|
|
FindByPage(req.GetOffset(), req.GetLimit())
|
|
|
|
return c.JSON(core.PageResp{
|
|
List: list,
|
|
Total: int(total),
|
|
Page: req.GetPage(),
|
|
Size: req.GetSize(),
|
|
})
|
|
}
|
|
|
|
type PageBatchByAdminReq struct {
|
|
c.PageReq
|
|
UserPhone *string `json:"user_phone"`
|
|
ResourceNo *string `json:"resource_no"`
|
|
BatchNo *string `json:"batch_no"`
|
|
Prov *string `json:"prov"`
|
|
City *string `json:"city"`
|
|
Isp *string `json:"isp"`
|
|
CreatedAtStart *time.Time `json:"created_at_start"`
|
|
CreatedAtEnd *time.Time `json:"created_at_end"`
|
|
}
|