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). Order(q.LogsUserUsage.Time.Desc()). 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"` }