diff --git a/api/v1/req.go b/api/v1/req.go new file mode 100644 index 0000000..fbc581f --- /dev/null +++ b/api/v1/req.go @@ -0,0 +1,15 @@ +package v1 + +// PageReq 公共请求参数 +type PageReq struct { + DateRange []string `p:"date_range"` //日期范围 + PageNum int `p:"page_num" v:"min:0#分页号码错误"` //当前页码 + PageSize int `p:"page_size" v:"max:50#分页数量最大50条"` //每页数 + OrderBy string //排序方式 +} + +// ListRes 列表公共返回 +type ListRes struct { + CurrentPage int `json:"current_page"` + Total int `json:"total"` +} diff --git a/api/v1/visitor.go b/api/v1/visitor.go index a05fcd4..5c836af 100644 --- a/api/v1/visitor.go +++ b/api/v1/visitor.go @@ -2,6 +2,7 @@ package v1 import ( "github.com/gogf/gf/v2/frame/g" + "vistor/internal/model/entity" ) type VisitorAccessReq struct { @@ -40,3 +41,19 @@ type VisitorStatisticRes struct { XAxis g.SliceStr `p:"x_axis"` YAxis g.SliceStr `p:"y_axis"` } + +type VisitorListReq struct { + g.Meta `path:"/list" tags:"visitor list" method:"post" summary:"visitor list"` + VisitorName string `p:"visitor_name"` + VisitorIdentity string `p:"visitor_identity"` + VisitorPhone string `p:"visitor_phone" v:"phone#请填写正确手机号"` + StartDate int `p:"start_date" v:"required-with:end_date|max-length:10#请选择起始日期|请选择正确的起始日期"` + EndDate int `p:"end_date" v:"required-with:start_date|max-length:10#请选择截止日期|请选择正确的截止日期"` + PageReq +} + +type VisitorListRes struct { + g.Meta `mime:"text/html" example:"string"` + List []*entity.VisitorRecord `json:"list"` + Total int `json:"total"` +} diff --git a/internal/controller/visitor.go b/internal/controller/visitor.go index 39d24da..b8a37db 100644 --- a/internal/controller/visitor.go +++ b/internal/controller/visitor.go @@ -36,3 +36,11 @@ func (c *cVisitor) VisitorStatistic(ctx context.Context, req *v1.VisitorStatisti } return } + +func (c *cVisitor) VisitorList(ctx context.Context, req *v1.VisitorListReq) (res *v1.VisitorListRes, err error) { + res, err = service.Visitor.VisitorList(ctx, req) + if err != nil { + return nil, gerror.Newf("系统繁忙,请稍后再试") + } + return +} diff --git a/internal/service/visitor.go b/internal/service/visitor.go index 3c0e3ad..6dcc28c 100644 --- a/internal/service/visitor.go +++ b/internal/service/visitor.go @@ -12,6 +12,7 @@ import ( "vistor/internal/consts" "vistor/internal/dao" "vistor/internal/model" + "vistor/internal/model/entity" ) type visitorService struct{} @@ -26,6 +27,55 @@ type IVisitor interface { VisitorAccess(ctx context.Context, req *v1.VisitorAccessReq) error VisitorStatistic(ctx context.Context, req *v1.VisitorAccessReq) (res *v1.VisitorAccessRes, err error) GetDiffDays(t1, t2 time.Time) int + VisitorList(ctx context.Context, req *v1.VisitorListReq) (res *v1.VisitorListRes, err error) +} + +func (s *visitorService) VisitorList(ctx context.Context, req *v1.VisitorListReq) (res *v1.VisitorListRes, err error) { + condition := g.Map{} + var records []*entity.VisitorRecord + + if req.PageNum == 0 { + req.PageNum = 1 + } + + if req.PageSize == 0 { + req.PageSize = 15 + } + + if req.VisitorName != "" { + condition["visitor_name like ?"] = "%" + req.VisitorName + "%" + } + + if req.VisitorIdentity != "" { + condition["visitor_identity like ?"] = "%" + req.VisitorIdentity + "%" + } + + if req.VisitorPhone != "" { + condition["visitor_phone like ?"] = "%" + req.VisitorPhone + "%" + } + + query := dao.VisitorRecord.Ctx(ctx).Where(condition) + + if req.StartDate != 0 || req.EndDate != 0 { + query = query.WhereBetween(dao.VisitorRecord.Columns().VisitAt, req.StartDate, req.EndDate) + } + + total, err := query.Count() + if err != nil { + return nil, err + } + + err = query.Page(req.PageNum, req.PageSize).Order("id desc").Scan(&records) + if err != nil { + return nil, err + } + + res = &v1.VisitorListRes{ + List: records, + Total: total, + } + + return } func (s *visitorService) VisitorAccess(ctx context.Context, req *v1.VisitorAccessReq) error { @@ -53,15 +103,15 @@ func (s *visitorService) VisitorStatistic(ctx context.Context, req *v1.VisitorSt condition := g.Map{} if req.VisitorName != "" { - condition["vr.visitor_name"] = req.VisitorName + condition["vr.visitor_name like ?"] = "%" + req.VisitorName + "%" } if req.VisitorIdentity != "" { - condition["vr.visitor_identity"] = req.VisitorIdentity + condition["vr.visitor_identity like ?"] = "%" + req.VisitorIdentity + "%" } if req.VisitorPhone != "" { - condition["vr.visitor_phone"] = req.VisitorPhone + condition["vr.visitor_phone like ?"] = "%" + req.VisitorPhone + "%" } if req.StatisticType == consts.StatisticTypeDay {