From 068830fff7a757ec41d3915b93046390b859f05d Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 13 Aug 2024 14:07:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E4=BC=9A?= =?UTF-8?q?=E5=91=98=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8-=E6=9C=80?= =?UTF-8?q?=E8=BF=91=E4=B8=8B=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/OrderMember.go | 49 +++++++++++++++++++++++++++++++++++ api/dao/OrderMember.go | 18 +++++++++++++ api/dto/OrderMember.go | 33 +++++++++++++++++++++++ api/router/router.go | 4 +++ utils/tz.go | 26 +++++++++++++++++++ 5 files changed, 130 insertions(+) diff --git a/api/controller/OrderMember.go b/api/controller/OrderMember.go index d774ad3..b3d9407 100644 --- a/api/controller/OrderMember.go +++ b/api/controller/OrderMember.go @@ -264,3 +264,52 @@ func (b *OrderMember) GetOrderMemberPayStatus(c *gin.Context) { responses.OkWithData(g, c) } + +// GetOrderMemberRecentList 获取会员订单列表-最近下单 +func (b *OrderMember) GetOrderMemberRecentList(c *gin.Context) { + // 获取数据 + orderMemberDao := dao.OrderMemberDao{} + + maps := make(map[string]interface{}) + maps["order_status"] = 2 + maps["is_delete"] = 0 + maps["pay_status"] = 2 + orderMembers, err := orderMemberDao.GetOrderMemberPreloadOrderLimitList(maps, "created_at desc", 20) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + g := make([]*dto.OrderMemberRecentListDto, len(orderMembers)) + + userDao := dao.UserDao{} + for i, member := range orderMembers { + response := &dto.OrderMemberRecentListDto{ + OrderId: fmt.Sprintf("%d", member.OrderId), + UserId: fmt.Sprintf("%d", member.UserId), + SystemMemberId: fmt.Sprintf("%d", member.SystemMemberId), + CreatedAt: member.CreatedAt, + } + + // 获取用户数据 + maps = make(map[string]interface{}) + maps["user_id"] = member.UserId + user, err := userDao.GetUser(maps) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + response.UserName = user.UserName + + response.MemberDays = member.SystemMember.MemberDays + + // 处理时间 + createdAt := time.Time(member.CreatedAt) + response.TimeDesc = utils.TimeToAgoString(createdAt) + + g[i] = response + } + + responses.OkWithData(g, c) +} diff --git a/api/dao/OrderMember.go b/api/dao/OrderMember.go index dcab610..61459c3 100644 --- a/api/dao/OrderMember.go +++ b/api/dao/OrderMember.go @@ -185,3 +185,21 @@ func (r *OrderMemberDao) GetUserFirstTimeBuyOrderMember(userId int64) (m *model. } return m, nil } + +// GetOrderMemberOrderLimitList 获取列表-排序、限制数量 +func (r *OrderMemberDao) GetOrderMemberOrderLimitList(maps interface{}, orderField string, limit int) (m []*model.OrderMember, err error) { + err = global.Db.Where(maps).Order(orderField).Limit(limit).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetOrderMemberPreloadOrderLimitList 获取列表-加载全部关联-排序、限制数量 +func (r *OrderMemberDao) GetOrderMemberPreloadOrderLimitList(maps interface{}, orderField string, limit int) (m []*model.OrderMember, err error) { + err = global.Db.Preload(clause.Associations).Where(maps).Order(orderField).Limit(limit).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dto/OrderMember.go b/api/dto/OrderMember.go index 72417cd..5443632 100644 --- a/api/dto/OrderMember.go +++ b/api/dto/OrderMember.go @@ -52,6 +52,17 @@ type OrderMemberPayStatusDto struct { ValidDate *model.LocalTime `json:"valid_date"` // 到期时间 } +// OrderMemberRecentListDto 会员订单列表-最近下单 +type OrderMemberRecentListDto struct { + OrderId string `json:"order_id"` // 主键id + UserId string `json:"user_id"` // 用户id + SystemMemberId string `json:"system_member_id"` // 会员id + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UserName string `json:"user_name"` // 用户id + MemberDays uint `json:"member_days"` // 会员天数 + TimeDesc string `json:"time_desc"` // 时间描述 +} + // GetOrderMemberListDto 列表 func GetOrderMemberListDto(m []*model.OrderMember) []*OrderMemberDto { // 处理返回值 @@ -116,6 +127,28 @@ func GetOrderMemberPayStatus(m *model.OrderMember) *OrderMemberPayStatusDto { } } +// GetOrderMemberRecentListDto 获取会员订单列表-最近下单 +func GetOrderMemberRecentListDto(m []*model.OrderMember) []*OrderMemberRecentListDto { + // 处理返回值 + responses := make([]*OrderMemberRecentListDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &OrderMemberRecentListDto{ + OrderId: fmt.Sprintf("%d", v.OrderId), + UserId: fmt.Sprintf("%d", v.UserId), + SystemMemberId: fmt.Sprintf("%d", v.SystemMemberId), + CreatedAt: v.CreatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} + // LoadSystemMember 加载会员数据 func (r *OrderMemberDto) LoadSystemMember(m *model.SystemMember) *OrderMemberDto { if m != nil { diff --git a/api/router/router.go b/api/router/router.go index cd6c40a..d515eef 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -235,6 +235,7 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 查询订单支付状态-单项 singleGroup.GET("/pay/status/:order_id", api.OrderSingle.GetOrderSinglePayStatus) + } // 会员订单 @@ -251,6 +252,9 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 查询订单支付状态-会员 memberGroup.GET("/pay/status/:order_id", api.OrderMember.GetOrderMemberPayStatus) + + // 获取会员订单列表-最近下单 + memberGroup.GET("/recent/list", api.OrderMember.GetOrderMemberRecentList) } } diff --git a/utils/tz.go b/utils/tz.go index 1792a48..e62666e 100644 --- a/utils/tz.go +++ b/utils/tz.go @@ -1,6 +1,7 @@ package utils import ( + "fmt" "hepa-calc-api/api/model" "time" ) @@ -22,3 +23,28 @@ func StrToLocalTime(s string) (*model.LocalTime, error) { return &t, nil } + +// TimeToAgoString 根据给定的时间返回一个描述性的字符串 +func TimeToAgoString(t time.Time) string { + now := time.Now() + diffTime := now.Sub(t) + + switch { + case diffTime < time.Minute: + return "1分钟前" + case diffTime < time.Hour: + minutes := int(diffTime.Minutes()) + return fmt.Sprintf("%d分钟前", minutes) + case diffTime < 24*time.Hour: + return "一小时前" + case diffTime < 48*time.Hour: + return "两天前" + case diffTime < 72*time.Hour: + return "三天前" + case diffTime < 10*time.Hour*24: + days := int(diffTime.Hours()) / 24 + return fmt.Sprintf("%d天前", days) + default: + return "十天前" + } +}