diff --git a/app/admin/apis/usermanage/user.go b/app/admin/apis/usermanage/user.go index 56d7bf1..a072cbe 100644 --- a/app/admin/apis/usermanage/user.go +++ b/app/admin/apis/usermanage/user.go @@ -23,11 +23,13 @@ func UserList(c *gin.Context) { Uid int `json:"uid"` // 用户id CooperativeBusinessId int `json:"cooperative_business_id"` MemberLevel int `json:"memberLevel"` - StoreId int `json:"store_id"` // 门店id - UserType int `json:"user_type"` // 用户类型 用户类型 1-普通用户 2-店员 - StartTime string `json:"startTime"` // 开始时间 - EndTime string `json:"endTime"` // 结束时间 - NameKey string `json:"nameKey"` // 昵称搜索 + StoreId int `json:"store_id"` // 门店id + UserType int `json:"user_type"` // 用户类型 用户类型 1-普通用户 2-店员 + StartTime string `json:"startTime"` // 开始时间 + EndTime string `json:"endTime"` // 结束时间 + NameKey string `json:"nameKey"` // 昵称搜索 + SortField string `json:"sort_field"` //排序字段 + SortType string `json:"sort_type"` //排序类型 }{ Page: 1, PageSize: 10, @@ -59,13 +61,35 @@ func UserList(c *gin.Context) { //req.SysUid = fmt.Sprintf("%.0f", sysUid) userList, _, count, err := models.GetUserList(req.Page, req.PageSize, req.Uid, req.MemberLevel, req.StoreId, - req.UserType, req.CooperativeBusinessId, req.Tel, req.StartTime, req.EndTime, req.NameKey) + req.UserType, req.CooperativeBusinessId, req.Tel, req.StartTime, req.EndTime, req.NameKey, req.SortField, req.SortType) if err != nil { logger.Errorf("err:", err) app.Error(c, http.StatusInternalServerError, err, "查询失败") return } + var uids []uint32 + for _, u := range userList { + if u.MemberExpireDays > 0 { + uids = append(uids, u.Uid) + } + } + //未归还卡带 + cards, err := models.GetUserExpiredCards(uids) + if err != nil { + logger.Errorf("err:", err) + app.Error(c, http.StatusInternalServerError, err, "查询失败") + return + } + for i, u := range userList { + c, ok := cards[u.Uid] + if ok { + userList[i].OrderCards = c + //滞纳金 一个卡带一天2块钱 + userList[i].ForfeitPenalty = len(c) * 200 * int(userList[i].MemberExpireDays) + } + } + ret := map[string]interface{}{ "count": count, "list": userList, diff --git a/app/admin/models/order.go b/app/admin/models/order.go index cc51ec1..953d406 100644 --- a/app/admin/models/order.go +++ b/app/admin/models/order.go @@ -1449,3 +1449,27 @@ func (m *CooperativeOrderReq) List() ([]Order, int64, error) { return orders, count, nil } + +func GetUserExpiredCards(userId []uint32) (map[uint32][]OrderCard, error) { + + var m = make(map[uint32][]OrderCard) + + var oc []OrderCard + err := orm.Eloquent.Table("order_card"). + Where("uid in (?)", userId). + Where("pay_status = ?", 2).Where("card_status in ?", []int{1, 2, 3}). + Find(&oc).Error + if err != nil { + return m, err + } + + for _, card := range oc { + l, ok := m[card.Uid] + if ok { + m[card.Uid] = append(l, card) + } else { + m[card.Uid] = []OrderCard{card} + } + } + return m, nil +} diff --git a/app/admin/models/user.go b/app/admin/models/user.go index cdba473..2031415 100644 --- a/app/admin/models/user.go +++ b/app/admin/models/user.go @@ -59,7 +59,9 @@ type UserInfo struct { RenewalTime time.Time `json:"renewal_time"` RenewalMemberLevel uint32 `json:"renewal_member_level"` - Store *Store `json:"store" gorm:"-"` + Store *Store `json:"store" gorm:"-"` + OrderCards []OrderCard `json:"order_cards" gorm:"-"` + ForfeitPenalty int `json:"forfeit_penalty" gorm:"-"` //滞纳金 } func (m *UserInfo) TableName() string { @@ -201,9 +203,14 @@ type OperationLog struct { Remark string `json:"remark"` // 备注 } -func GetUserList(page, pageSize, uid, memberLevel, storeId, userType, cooperativeBusinessId int, tel, startTime, endTime, nameKey string) ([]UserInfo, uint32, uint32, error) { +type U struct { + UserInfo + MemberExpireDays uint32 `json:"member_expire_days"` //会员过期天数 +} + +func GetUserList(page, pageSize, uid, memberLevel, storeId, userType, cooperativeBusinessId int, tel, startTime, endTime, nameKey, sortFiled, sortType string) ([]U, uint32, uint32, error) { var ( - users = make([]UserInfo, 0) + users = make([]U, 0) totalPage uint32 ) fmt.Println("tel:", tel) @@ -213,6 +220,12 @@ func GetUserList(page, pageSize, uid, memberLevel, storeId, userType, cooperativ if page < 0 { page = 0 } + if sortFiled == "" { + sortFiled = "id" + } + if sortType == "" { + sortType = "DESC" + } user := &UserInfo{} qs := orm.Eloquent.Table(user.TableName()).Debug() @@ -261,7 +274,11 @@ func GetUserList(page, pageSize, uid, memberLevel, storeId, userType, cooperativ return users, 0, 0, err } - err = qs.Order("id DESC").Offset(page * pageSize).Limit(pageSize).Find(&users).Error + currentTime := time.Now() + + //计算过期天数 + qs = qs.Select("*, CASE WHEN (member_level IN (2, 4, 5) AND member_expire < ?) THEN DATEDIFF(?,member_expire) ELSE 0 END AS member_expire_days", currentTime, currentTime) + err = qs.Order(fmt.Sprintf("%s %s", sortFiled, sortType)).Offset(page * pageSize).Limit(pageSize).Find(&users).Error if err != nil && err != RecordNotFound { logger.Errorf("err:", err) return users, 0, 0, err