package models import ( "errors" "fmt" "github.com/gin-gonic/gin" "github.com/xuri/excelize/v2" orm "go-admin/common/global" "go-admin/logger" "go-admin/tools/app" "net" "net/http" "strings" "time" ) //go:generate goqueryset -in user.go // gen:qs type UserInfo struct { Model Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` MemberLevel uint32 `json:"memberLevel"` // 会员等级 1-会员 MemberExpire time.Time `json:"memberExpire"` // 会员到期时间 OpenMemberTime time.Time `json:"open_member_time"` // 开通会员 Bond uint32 `json:"bond"` // 保证金 WxName string `json:"wxName"` // 昵称 WxAvatar string `json:"wxAvatar"` // 头像 WxOpenID string `json:"wxOpenID"` AppOpenID string `json:"appOpenID"` WxUnionID string `json:"wxUnionID"` Tel string `json:"tel"` // 电话 Gender uint8 `json:"gender"` // 性别 City string `json:"city"` // 城市 Province string `json:"province"` // 省 Country string `json:"country"` // 市 Deposit uint32 `json:"deposit"` // 押金 UserType uint8 `json:"user_type"` // 用户类型 1-普通用户 2-店员 XcxRoleId uint32 `json:"xcx_role_id"` // 角色id OpenMemberChannel string `json:"open_member_channel" ` // 开通会员渠道: -门店推广 -用户邀请 -兑换码 StoreId uint64 `json:"store_id"` // 门店id InviteCodeUrl string `json:"invite_code_url"` // 分享二维码 MemberOpenTime time.Time `json:"member_open_time" gorm:"-"` // LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间 IP string `json:"-" gorm:"type:varchar(60)"` // ip InBlack bool `json:"in_black"` // 是否在黑名单 CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id CooperativeName string `json:"cooperative_name"` // 合作商名称 Version uint32 `json:"-"` MemberStatus uint8 `json:"member_status" gorm:"-"` InviteTime time.Time `json:"invite_time"` ShopAssistantName string `json:"shop_assistant_name"` // 店员名称 RenewalTime time.Time `json:"renewal_time"` RenewalMemberLevel uint32 `json:"renewal_member_level"` //ErpMemberLevel string `json:"erp_member_level"` FirstRetailOrder time.Time `json:"first_retail_order"` MemberLevelString string `json:"member_level_string" gorm:"-"` // 会员类型 } func (m *UserInfo) TableName() string { return "user" } const ( UserTypeConsumer = 1 // 普通用户 UserTypeShopAssistant = 2 // 店员 ) const ( OpenMemberChannelStorePromotion = "store_promotion" // 门店推荐 OpenMemberChannelUserInvite = "user_invite" OpenMemberChannelRedeemCode = "redeem_code" ) const DateTimeFormat = "2006-01-02" const TimeFormat = "2006-01-02 15:04:05" const ( ExportBaseUrl = "https://dev.admin.deovo.com/load/export/" ) type UserInvite struct { Model FromUid uint32 `json:"from_uid"` // 邀请用户id UserType uint8 `json:"user_type"` // 用户类型 StoreId uint64 `json:"store_id"` // 门店id MemberOpenTime time.Time `json:"member_open_time"` // 开通会员 MemberType uint8 `json:"member_type"` // 被邀请用户 1-普通用户 2-会员 MemberStatus uint8 `json:"member_status"` // 被邀请用户 1-未开通 2-已开通 3-已取消会员 ToUid uint32 `json:"to_uid"` // 被邀请用户 StoreType uint32 `json:"store_type"` // 门店类型 Action uint32 `json:"action"` // 2-激活邀请 SpendType uint32 `json:"spend_type"` // 1-开通会员 2-续费 3-升级 MemberLevel uint32 `json:"member_level"` // 会员等级 } func (m *UserInvite) TableName() string { return "user_invite" } const ( DepositRefundStatusUnconfirmed = 1 // 待确认 DepositRefundStatusConfirmed = 2 // 已确认 DepositRefundStatusRefunded = 3 // 已退款 DepositRefundStatusRefused = 4 // 已拒绝 ) // gen:qs type DepositRefundRecord struct { Model Uid uint32 `json:"uid"` Status uint32 `json:"status"` // unconfirmed confirmed refunded Amount uint32 `json:"amount"` Operator uint32 `json:"operator"` // 操作者 ConfirmTime time.Time `json:"confirm_time"` User User `json:"user" gorm:"-"` } const ( //FundTypeMemberGold = "member_gold" // 黄金会员 //FundTypeMemberPlatinum = "member_platinum" // 白金会员 //FundTypeMemberBlackGold = "member_black_gold" // 黑金会员 //FundTypeMemberGoldDeposit = "member_gold_deposit" // 黄金会员押金 //FundTypeMemberPlatinumDeposit = "member_platinum_deposit" // 白金会员押金 //FundTypeMemberBlackGoldDeposit = "member_black_gold_platinum" // 黑金会员押金 //FundTypeExpressFee = "express_fee" // 邮费 //FundTypeUpgradeMember = "upgrade_member" // 升级会员 //FundTypeMemberExpireDelay = "member_expire_delay" // 滞纳金 FundTypeMemberFee = "member_fee" // 会员费 FundTypeMemberDeposit = "member_deposit" // 押金 FundTypeExpressFee = "express_fee" // 邮费 FundTypeUpgradeMember = "upgrade_member" // 升级会员 FundTypeMemberExpireDelay = "member_expire_delay" // 滞纳金 FundTypeDepositRefund = "deposit_refund" // 退押金 FundTypeExpressFeeRefund = "express_fee_refund" // 退邮费 FundTypeRecycleCard = "recycle_card" // 回收卡带 ) // gen:qs type FundRecord struct { Model Uid uint32 `json:"uid" gorm:"index"` FundType string `json:"fund_type" gorm:"index"` // -member_gold -member_platinum -member_black_gold Amount int64 `json:"amount"` TransactionId string `json:"transaction_id" gorm:"index"` // 支付单号 OutTradeNo string `json:"out_trade_no" gorm:"index"` RefundId string `json:"refund_id" gorm:"index"` PaymentNo string `json:"payment_no" gorm:"index"` // 付款单号 Status uint32 `json:"status"` // 1-待支付 2-已支付 3-已退款 Remark string `json:"remark"` // 备注 // fund_record } type XcxRole struct { Model RoleName string `json:"role_name" gorm:"size:255;"` // 角色名称 RoleKey string `json:"role_key" gorm:"size:255;"` // 角色代码 RoleSort int `json:"role_sort" gorm:""` // 角色排序 Status string `json:"status" gorm:"size:255;"` // 状态:1-停用 2-正常 Flag string `json:"flag" gorm:"size:255;"` // CreateBy string `json:"create_by" gorm:"size:255;"` // UpdateBy string `json:"update_by" gorm:"size:255;"` // Remark string `json:"remark" gorm:"size:255;"` // 备注 Params string `json:"params" gorm:"-"` MenuIds []int `json:"menuIds" gorm:"-"` DeptIds []int `json:"deptIds" gorm:"-"` // xcx_role } const ( OperationTypeRentCardRevert = "rent_card_revert" OperationTypeRentCardDeliver = "rent_card_deliver" OperationTypeMallOrderRefundSendReceive = "mall_goods_order_refund_receive" // 退货入库 ) // gen:qs type OperationLog struct { Model Uid uint32 `json:"uid" gorm:"index"` // 店员id SysUid uint32 `json:"sys_uid" gorm:"index"` Description string `json:"description"` // 描述 OperationType string `json:"operation_type" gorm:"index"` // 操作类型 CorrelationId uint32 `json:"correlation_id" gorm:"index"` // 关联id CorrelationName string `json:"correlation_name" gorm:"index"` // 关联name StoreId uint32 `json:"store_id" gorm:"index"` // 门店id StoreName string `json:"store_name"` // 门店名称 CooperativeName string `json:"cooperative_name"` // 合作商名称 CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id SerialNumber string `json:"serial_number" gorm:"index"` // 卡编号 Detail string `json:"detail"` // 详情 Remark string `json:"remark"` // 备注 } func GetUserList(page, pageSize, uid, memberLevel, storeId, userType, cooperativeBusinessId int, tel, startTime, endTime, nameKey string) ([]UserInfo, uint32, uint32, error) { var ( users = make([]UserInfo, 0) totalPage uint32 ) fmt.Println("tel:", tel) fmt.Println("nameKey:", nameKey) page -= 1 if page < 0 { page = 0 } user := &UserInfo{} qs := orm.Eloquent.Table(user.TableName()).Debug() if tel != "" { qs = qs.Where("tel", tel) } if uid != 0 { qs = qs.Where("uid", uid) } if memberLevel != 0 { qs = qs.Where("member_level", memberLevel) } if storeId != 0 { qs = qs.Where("store_id", storeId) } if userType != 0 { qs = qs.Where("user_type", userType) } if cooperativeBusinessId != 0 { qs = qs.Where("cooperative_business_id=?", cooperativeBusinessId) } if startTime != "" { parse, err := time.Parse(DateTimeFormat, startTime) if err != nil { logger.Errorf("err:", err) return users, 0, 0, err } qs = qs.Where("created_at > ?", parse) } if endTime != "" { parse, err := time.Parse(DateTimeFormat, endTime) if err != nil { logger.Errorf("err:", err) return users, 0, 0, err } qs = qs.Where("created_at < ?", parse) } if nameKey != "" { qs = qs.Where("wx_name LIKE ?", "%"+nameKey+"%") } var count int64 err := qs.Count(&count).Error if err != nil { logger.Errorf("err:", err) return users, 0, 0, err } err = qs.Order("id DESC").Offset(page * pageSize).Limit(pageSize).Find(&users).Error if err != nil && err != RecordNotFound { logger.Errorf("err:", err) return users, 0, 0, err } totalPage = uint32(int(count)/pageSize + 1) return users, totalPage, uint32(count), nil } type CommonProblem struct { Model Question string `json:"question"` Answer string `json:"answer" gorm:"type:text"` Sort uint32 `json:"sort" gorm:"index"` } func (*CommonProblem) TableName() string { return "common_problem" } type GroupSendMessageTemplate struct { Model Title string `json:"title" ` Message string `json:"message"` UserType uint32 `json:"user_type" gorm:"index,column:user_type"` // 1-所有用户 2-会员 3-非会员 4-指定用户 SendTime time.Time `json:"send_time"` Tels string `json:"tels"` Status uint32 `json:"status"` // 1-待发送 2-已发送 } func (*GroupSendMessageTemplate) TableName() string { return "group_send_message_template" } func GetUserInfoMap(uids []uint32) (map[uint32]UserInfo, error) { userInfoMap := make(map[uint32]UserInfo, 0) if len(uids) == 0 { return userInfoMap, nil } var userInfos []UserInfo err := orm.Eloquent.Table("user").Where("uid in (?)", uids).Find(&userInfos).Error if err != nil { logger.Error("err:", err) return userInfoMap, err } for i, _ := range userInfos { userInfoMap[userInfos[i].Uid] = userInfos[i] } return userInfoMap, nil } func (m *CommonProblem) List() ([]CommonProblem, error) { commons := make([]CommonProblem, 0) err := orm.Eloquent.Table("common_problem").Order("sort desc").Find(&commons).Error if err != nil { logger.Error("err:", err) return commons, err } return commons, nil } func (m *CommonProblem) Add() error { err := orm.Eloquent.Table("common_problem").Create(m).Error if err != nil { logger.Error("err:", err) return err } return nil } func (m *CommonProblem) Modify() error { err := orm.Eloquent.Table("common_problem").Save(m).Error if err != nil { logger.Error("err:", err) return err } return nil } func (m *CommonProblem) Del() error { err := orm.Eloquent.Table("common_problem").Where("id", m.ID).Delete(m).Error if err != nil { logger.Error("err:", err) return err } return nil } type UserAddress struct { Model Uid uint32 `json:"uid" gorm:"index"` ReceiverName string `json:"receiver_name"` Tel string `json:"tel" gorm:"type:varchar(20)"` Province string `json:"province" gorm:"type:varchar(100)"` City string `json:"city" gorm:"type:varchar(100)"` District string `json:"district" gorm:"type:varchar(100)"` Address string `json:"address" gorm:"type:varchar(100)"` State uint8 `json:"state"` IsDefault uint8 `json:"is_default"` } func (m *UserAddress) TableName() string { return `user_address` } // gen:qs type InviteMemberReport struct { Model Uid uint32 `json:"uid" gorm:"index"` StoreId uint32 `json:"store_id" gorm:"index"` // 门店id GoldCount uint32 `json:"gold_count"` // 黄金数量 PlatinumCount uint32 `json:"platinum_count"` // 白金数量 BlackGoldCount uint32 `json:"black_gold_count"` // 黑金数量 Date string `json:"date" gorm:"index"` // 业绩时间 DeductAmount uint32 `json:"deduct_amount"` // 店员提成 CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id CooperativeName string `json:"cooperative_name"` // 合作商名称 GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成 PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成 BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金会员提成 UserInfo *UserInfo `json:"user_info" gorm:"-"` // 用户 Store *Store `json:"store" gorm:"-"` // 门店 // ReportTime string `json:"report_time" gorm:"index"` // 业绩时间 // invite_member_report } type UserInviteListReq struct { //StoreId uint32 `json:"store_id"` // 门店id Uid uint32 `json:"uid"` // 用户id Page int `json:"pageIndex"` PageSize int `json:"pageSize"` MemberType int `json:"memberType"` // 0-全部 1-普通用户 2-会员 StartTime string `json:"startTime"` // 开始时间 EndTime string `json:"endTime"` // 结束时间 } func (m *UserInfo) InitUserInvite(invite UserInvite) { m.MemberOpenTime = invite.MemberOpenTime m.MemberStatus = invite.MemberStatus m.InviteTime = invite.CreatedAt m.MemberLevel = invite.MemberLevel } func (m *UserInviteListReq) InviteList() ([]UserInfo, int, error) { var ( users = make([]UserInfo, 0) totalPage uint32 page = m.Page - 1 pageSize = m.PageSize ) if page < 0 { page = 0 } if pageSize == 0 { pageSize = 10 } //user := &UserInfo{} //UserInvite{} var userInvites []UserInvite qs := orm.Eloquent.Table("user_invite").Where("from_uid", m.Uid) if m.MemberType != 0 { qs = qs.Where("member_type=?", m.MemberType) } if m.StartTime != "" { parse, err := time.Parse(DateTimeFormat, m.StartTime) if err != nil { logger.Errorf("err:", err) return users, 0, err } if m.MemberType == 2 { qs = qs.Where("member_open_time > ?", parse) } else { qs = qs.Where("created_at > ?", parse) } } if m.EndTime != "" { parse, err := time.Parse(DateTimeFormat, m.EndTime) if err != nil { logger.Errorf("err:", err) return users, 0, err } parse = parse.AddDate(0, 0, 1) if m.MemberType == 2 { qs = qs.Where("member_open_time < ?", parse) } else { qs = qs.Where("created_at < ?", parse) } } var count int64 err := qs.Count(&count).Error if err != nil { logger.Errorf("err:", err) return users, 0, err } err = qs.Order("id DESC").Offset(page * pageSize).Limit(pageSize).Find(&userInvites).Error if err != nil && err != RecordNotFound { logger.Errorf("err:", err) return users, 0, err } totalPage = uint32(int(count)/pageSize + 1) uids := make([]uint32, 0) userInviteMap := make(map[uint32]UserInvite, 0) for i, _ := range userInvites { uids = append(uids, userInvites[i].ToUid) userInviteMap[userInvites[i].ToUid] = userInvites[i] } err = orm.Eloquent.Table("user").Debug().Where("uid in (?)", uids).Find(&users).Error if err != nil { logger.Errorf("err:", err) return users, 0, err } fmt.Println("totalPage", totalPage) userMap := make(map[uint32]UserInfo, 0) for i, _ := range users { userMap[users[i].Uid] = users[i] } list := make([]UserInfo, 0, len(users)) for i, _ := range uids { invite, ok1 := userInviteMap[uids[i]] if !ok1 { continue } userInfo, ok2 := userMap[uids[i]] if !ok2 { continue } userInfo.InitUserInvite(invite) list = append(list, userInfo) } return list, int(count), nil } type UserInviteMember struct { FromUserInfo UserInfo ToUserInfo UserInfo Store Store UserInvite } func MemberLevelToString(memberLevel uint32) string { switch memberLevel { case 2: return "黄金会员" case 4: return "白金会员" case 5: return "黑金会员" } return "" } type RecordExist struct { RecordExist int64 `json:"record_exist"` } func QueryRecordExist(sql string) (bool, error) { var recordExist RecordExist existSql := fmt.Sprintf("SELECT EXISTS (%s) AS record_exist;", sql) err := orm.Eloquent.Raw(existSql).Scan(&recordExist).Error if err != nil { logger.Error("err:", err) return false, err } return recordExist.RecordExist == 1, nil } //func ExportUserMember(storeId uint32, startTime, endTime string) string { // var userInvites []UserInvite // qs := orm.Eloquent.Table("invite") // // if storeId != 0 { // qs = qs.Where("store_id", storeId) // } // if startTime != "" { // parse, err := time.Parse(DateTimeFormat, startTime) // if err != nil { // logger.Errorf("err:", err) // return "" // } // qs = qs.Where("member_open_time > ?", parse) // } // if endTime != "" { // parse, err := time.Parse(DateTimeFormat, endTime) // if err != nil { // logger.Errorf("err:", err) // return "" // } // parse = parse.AddDate(0, 0, 1) // qs = qs.Where("member_open_time < ?", parse) // } // // err := qs.Order("id DESC,store_id DESC,from_uid DESC").Find(&userInvites).Error // if err != nil && err != RecordNotFound { // logger.Errorf("err:", err) // return "" // } // // storeIds := make([]uint64, 0) // fromUids := make([]uint32, 0) // toUids := make([]uint32, 0) // for i, _ := range userInvites { // storeIds = append(storeIds, userInvites[i].StoreId) // fromUids = append(fromUids, userInvites[i].FromUid) // toUids = append(toUids, userInvites[i].ToUid) // } // // var stores []Store // err = orm.Eloquent.Table("store").Where("id in (?)", storeIds).Find(&stores).Error // if err != nil { // logger.Error("err:", err) // return "" // } // storeMap := make(map[uint32]Store) // for i, _ := range stores { // storeMap[stores[i].ID] = stores[i] // } // // fromUids = append(fromUids, toUids...) // var userInfos []UserInfo // err = orm.Eloquent.Table("user").Where("uid in (?)", fromUids).Find(&userInfos).Error // if err != nil { // logger.Error("err:", err) // return "" // } // userInfoMap := make(map[uint32]UserInfo, 0) // for i, _ := range userInfos { // userInfoMap[userInfos[i].Uid] = userInfos[i] // } // // inviteMembers := make([]UserInviteMember, 0, len(userInvites)) // for i, _ := range userInvites { // fromUser, _ := userInfoMap[userInvites[i].FromUid] // toUser, ok2 := userInfoMap[userInvites[i].ToUid] // if !ok2 { // continue // } // store, ok1 := storeMap[uint32(userInvites[i].StoreId)] // if !ok1 { // store = storeMap[uint32(toUser.StoreId)] // } // invite := UserInviteMember{ // FromUserInfo: fromUser, // Store: store, // ToUserInfo: toUser, // UserInvite: userInvites[i], // } // inviteMembers = append(inviteMembers, invite) // } // // fileName := "邀请会员" // if storeId == 0 { // fileName = "全部门店邀请会员" // } else { // if len(stores) > 0 { // fileName = stores[0].Name // } // } // //url := "http://switch.deovo.com:8000/img/export/" // url := "http://39.108.188.218:8000/img/export/" // // fileName = fileName + time.Now().Format("2006-01-02 15:04:05") + ".csv" // //f, err := os.OpenFile(fmt.Sprintf("./")+fileName, os.O_CREATE|os.O_TRUNC|os.O_APPEND|os.O_RDWR, 0644) // f, err := os.OpenFile(fmt.Sprintf("/www/server/images/export/")+fileName, os.O_CREATE|os.O_TRUNC|os.O_APPEND|os.O_RDWR, 0644) // if err != nil { // fmt.Println(err) // return fileName // } // defer f.Close() // // w := csv.NewWriter(f) // // //headline := []string{"门店名称", "店员id", "店员昵称","姓名", "会员id", "会员昵称", "注册会员时间", "会员状态"} // headline := []string{"门店名称", "店员id", "姓名", "会员id", "会员昵称", "会员等级", "会员手机号", "注册会员时间", "会员状态"} // if err := w.Write(headline); err != nil { // log.Fatalln("error writing record to csv:", err) // } // // for _, invite := range inviteMembers { // //fmt.Println("MemberOpenTime",invite.UserInvite.MemberOpenTime) // //fmt.Println("MemberOpenTime",invite.UserInvite.MemberOpenTime.Format("2006-01-02 15:04:05")) // record := []string{invite.Store.Name, fmt.Sprintf("%d", invite.FromUserInfo.Uid), invite.FromUserInfo.ShopAssistantName, // fmt.Sprintf("%d", invite.ToUserInfo.Uid), invite.ToUserInfo.WxName, MemberLevelToString(invite.UserInvite.MemberLevel), // invite.ToUserInfo.Tel, invite.UserInvite.MemberOpenTime.Format("2006-01-02 15:04:05"), // GetUserInviteStatus(invite.MemberStatus)} // if err := w.Write(record); err != nil { // log.Fatalln("error writing record to csv:", err) // } // } // // w.Flush() // if err := w.Error(); err != nil { // log.Fatal(err) // } // // return url + fileName //} // gen:qs type UserInviteRecord struct { Model ToUid uint32 `json:"to_uid"` // 用户ID FromUid uint32 `json:"from_uid"` // 邀请人ID Action uint32 `json:"action"` // 1-未激活 2-激活邀请 SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级 MemberLevel uint32 `json:"member_level"` // 会员等级 First uint32 `json:"first"` // 首次 Scan uint32 `json:"scan"` // 扫码 ActionTime time.Time `json:"action_time"` // 激活时间 ShopAssistantName string `json:"shop_assistant_name" gorm:"-"` // 店员名称 // user_invite_record } type UserInviteRecordReq struct { PageNum int `json:"pageIndex"` PageSize int `json:"pageSize"` MemberType int `json:"member_type"` // 1-首次邀请 2-开通黄金 3-开通白金 4-开通黑金 5-续费黄金 6-续费白金 7-续费黑金 FromUid uint32 `json:"from_uid"` ToUid uint32 `json:"to_uid"` StartTime time.Time `json:"startTime"` // 开始时间 EndTime time.Time `json:"endTime"` // 结束时间 } func (m *UserInviteRecordReq) List() ([]UserInviteRecord, int64, error) { var records []UserInviteRecord page := m.PageNum - 1 pageSize := m.PageSize if page < 0 { page = 0 } if pageSize == 0 { pageSize = 10 } qs := orm.Eloquent.Table("user_invite_record").Where("action=2") //qs := orm.Eloquent.Table("user_invite_record") if m.MemberType != 0 { switch m.MemberType { case 1: qs = qs.Where("first=1").Where("spend_type=1") case 2: qs = qs.Where("member_level=2").Where("spend_type=2") case 3: qs = qs.Where("member_level=4").Where("spend_type=2") case 4: qs = qs.Where("member_level=5").Where("spend_type=2") case 5: qs = qs.Where("member_level=2").Where("spend_type=3") case 6: qs = qs.Where("member_level=4").Where("spend_type=3") case 7: qs = qs.Where("member_level=5").Where("spend_type=3") } } if m.FromUid != 0 { qs = qs.Where("from_uid=?", m.FromUid) } if m.ToUid != 0 { qs = qs.Where("to_uid=?", m.ToUid) } if !m.StartTime.IsZero() { //qs = qs.Where("created_at > ?", m.StartTime) qs = qs.Where("action_time > ?", m.StartTime) } if !m.EndTime.IsZero() { //qs = qs.Where("created_at < ?", m.EndTime) qs = qs.Where("action_time < ?", m.EndTime) } var count int64 err := qs.Count(&count).Error if err != nil { logger.Errorf("err:", err) return records, 0, err } err = qs.Order("action_time DESC").Offset(page * pageSize).Limit(pageSize).Find(&records).Error if err != nil && err != RecordNotFound { logger.Errorf("err:", err) return records, 0, err } return records, count, nil } func GetIP(r *http.Request) (string, error) { ip := r.Header.Get("X-Real-IP") if net.ParseIP(ip) != nil { return ip, nil } ip = r.Header.Get("X-Forward-For") for _, i := range strings.Split(ip, ",") { if net.ParseIP(i) != nil { return i, nil } } ip, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { return "", err } if net.ParseIP(ip) != nil { return ip, nil } return "", errors.New("no valid ip found") } //func ExportUserMemberList(storeId, memberType uint32, startTime, endTime string) string { // var userInvites []UserInvite // qs := orm.Eloquent.Table("user_11invite").Where("from_uid > 0") // if memberType == 1 { // qs = qs.Where("member_type=?", 1) // } else if memberType == 2 { // qs = qs.Where("member_type in (?)", []uint32{2, 4, 5}) // } else if memberType == 3 { // qs = qs.Where("member_type=?", 3) // } // // if storeId != 0 { // qs = qs.Where("store_id", storeId) // } // if startTime != "" { // parse, err := time.Parse(DateTimeFormat, startTime) // if err != nil { // logger.Errorf("err:", err) // return "" // } // qs = qs.Where("member_open_time > ?", parse) // } // if endTime != "" { // parse, err := time.Parse(DateTimeFormat, endTime) // if err != nil { // logger.Errorf("err:", err) // return "" // } // parse = parse.AddDate(0, 0, 1) // qs = qs.Where("member_open_time < ?", parse) // } // // err := qs.Order("id DESC,store_id DESC,from_uid DESC").Find(&userInvites).Error // if err != nil && err != RecordNotFound { // logger.Errorf("err:", err) // return "" // } // // storeIds := make([]uint64, 0) // fromUids := make([]uint32, 0) // toUids := make([]uint32, 0) // for i, _ := range userInvites { // storeIds = append(storeIds, userInvites[i].StoreId) // fromUids = append(fromUids, userInvites[i].FromUid) // toUids = append(toUids, userInvites[i].ToUid) // } // // var stores []Store // err = orm.Eloquent.Table("store").Where("id in (?)", storeIds).Find(&stores).Error // if err != nil { // logger.Error("err:", err) // return "" // } // storeMap := make(map[uint32]Store) // for i, _ := range stores { // storeMap[stores[i].ID] = stores[i] // } // // fromUids = append(fromUids, toUids...) // var userInfos []UserInfo // err = orm.Eloquent.Table("user").Where("uid in (?)", fromUids).Find(&userInfos).Error // if err != nil { // logger.Error("err:", err) // return "" // } // userInfoMap := make(map[uint32]UserInfo, 0) // for i, _ := range userInfos { // userInfoMap[userInfos[i].Uid] = userInfos[i] // } // // inviteMembers := make([]UserInviteMember, 0, len(userInvites)) // for i, _ := range userInvites { // fromUser, _ := userInfoMap[userInvites[i].FromUid] // toUser, ok2 := userInfoMap[userInvites[i].ToUid] // if !ok2 { // continue // } // store, ok1 := storeMap[uint32(userInvites[i].StoreId)] // if !ok1 { // store = storeMap[uint32(toUser.StoreId)] // } // invite := UserInviteMember{ // FromUserInfo: fromUser, // Store: store, // ToUserInfo: toUser, // UserInvite: userInvites[i], // } // inviteMembers = append(inviteMembers, invite) // } // // fileName := "邀请会员" // if storeId == 0 { // fileName = "全部门店邀请会员" // } else { // if len(stores) > 0 { // fileName = stores[0].Name // } // } // //url := "http://switch.deovo.com:8000/img/export/" // url := "http://39.108.188.218:8000/img/export/" // // fileName = fileName + time.Now().Format("2006-01-02 15:04:05") + ".csv" // //f, err := os.OpenFile(fmt.Sprintf("./")+fileName, os.O_CREATE|os.O_TRUNC|os.O_APPEND|os.O_RDWR, 0644) // f, err := os.OpenFile(fmt.Sprintf("/www/server/images/export/")+fileName, os.O_CREATE|os.O_TRUNC|os.O_APPEND|os.O_RDWR, 0644) // if err != nil { // fmt.Println(err) // return fileName // } // defer f.Close() // // w := csv.NewWriter(f) // // //headline := []string{"门店名称", "店员id", "店员昵称","姓名", "会员id", "会员昵称", "注册会员时间", "会员状态"} // headline := []string{"门店名称", "店员id", "姓名", "会员id", "会员昵称", "会员等级", "注册会员时间", "会员状态"} // if err := w.Write(headline); err != nil { // log.Fatalln("error writing record to csv:", err) // } // // for _, invite := range inviteMembers { // //fmt.Println("MemberOpenTime",invite.UserInvite.MemberOpenTime) // //fmt.Println("MemberOpenTime",invite.UserInvite.MemberOpenTime.Format("2006-01-02 15:04:05")) // record := []string{invite.Store.Name, fmt.Sprintf("%d", invite.FromUserInfo.Uid), invite.FromUserInfo.ShopAssistantName, // fmt.Sprintf("%d", invite.ToUserInfo.Uid), invite.ToUserInfo.WxName, MemberLevelToString(invite.UserInvite.MemberLevel), invite.UserInvite.MemberOpenTime.Format("2006-01-02 15:04:05"), // GetUserInviteStatus(invite.MemberStatus)} // if err := w.Write(record); err != nil { // log.Fatalln("error writing record to csv:", err) // } // } // // w.Flush() // if err := w.Error(); err != nil { // log.Fatal(err) // } // // return url + fileName //} // 导出用户 //func ExportUserMemberList(storeId, memberType, cooperativeId uint32, startTime, endTime string) string { // var userInfos []UserInfo // qs := orm.Eloquent.Table("user") // if memberType == 1 { // qs = qs.Where("member_level=?", 1) // } else if memberType == 2 { // qs = qs.Where("member_level in (?)", []uint32{2, 4, 5}) // } else if memberType == 3 { // qs = qs.Where("member_level=?", 3) // } // // if storeId != 0 { // qs = qs.Where("store_id=?", storeId) // } // if startTime != "" { // parse, err := time.Parse(DateTimeFormat, startTime) // if err != nil { // logger.Errorf("err:", err) // return "" // } // //qs = qs.Where("created_at > ?", parse) // qs = qs.Where("open_member_time > ?", parse) // } // if endTime != "" { // parse, err := time.Parse(DateTimeFormat, endTime) // if err != nil { // logger.Errorf("err:", err) // return "" // } // parse = parse.AddDate(0, 0, 1) // //qs = qs.Where("created_at < ?", parse) // qs = qs.Where("open_member_time < ?", parse) // } // if cooperativeId != 0 { // qs = qs.Where("cooperative_business_id=?", cooperativeId) // } // //err := qs.Order("id DESC,store_id DESC,from_uid DESC").Find(&userInvites).Error // err := qs.Order("id DESC,store_id DESC,uid DESC").Find(&userInfos).Error // //err := qs.Order("id DESC").Find(&userInfos).Error // if err != nil && err != RecordNotFound { // logger.Errorf("err:", err) // return "" // } // // storeIds := make([]uint32, 0) // fromUids := make([]uint32, 0) // toUids := make([]uint32, 0) // for i, _ := range userInfos { // storeIds = append(storeIds, uint32(userInfos[i].StoreId)) // //fromUids = append(fromUids, userInvites[i].FromUid) // toUids = append(toUids, userInfos[i].Uid) // } // // //var stores []Store // //err = orm.Eloquent.Table("store").Where("id in (?)", storeIds).Find(&stores).Error // //if err != nil { // // logger.Error("err:", err) // // return "" // //} // //storeMap := make(map[uint32]Store) // //for i, _ := range stores { // // storeMap[stores[i].ID] = stores[i] // //} // // //fromUids = append(fromUids, toUids...) // var userInvites []UserInvite // inviteQs := orm.Eloquent.Table("user_invite").Where("to_uid in (?)", toUids) // if memberType == 1 { // // } // if memberType == 2 { // inviteQs = inviteQs.Where("action=2").Where("spend_type=2") // } // err = inviteQs.Find(&userInvites).Error // if err != nil { // logger.Error("err:", err) // return "" // } // // userInviteMap := make(map[uint32]UserInvite, 0) // for i, _ := range userInvites { // userInviteMap[userInvites[i].ToUid] = userInvites[i] // fromUids = append(fromUids, userInvites[i].FromUid) // } // // var fromUserInfos []UserInfo // err = orm.Eloquent.Table("user").Where("uid in (?)", fromUids).Find(&fromUserInfos).Error // if err != nil { // logger.Error("from user infos err:", err) // return "" // } // fromUserMap := make(map[uint32]UserInfo, 0) // for i, _ := range fromUserInfos { // fromUserMap[fromUserInfos[i].Uid] = fromUserInfos[i] // // // storeIds = append(storeIds, uint32(fromUserInfos[i].StoreId)) // } // // storeMap := StoreMapByIds(storeIds) // // inviteMembers := make([]UserInviteMember, 0, len(userInvites)) // for i, _ := range userInfos { // //toUser, ok2 := userInfoMap[userInvites[i].ToUid] // store, ok1 := storeMap[(userInfos[i].StoreId)] // userInfoMember := UserInviteMember{ // FromUserInfo: UserInfo{}, // Store: store, // ToUserInfo: userInfos[i], // UserInvite: UserInvite{}, // } // userInvite, ok2 := userInviteMap[userInfos[i].Uid] // if ok2 { // userInfoMember.UserInvite = userInvite // if !ok1 { // store = storeMap[(userInvite.StoreId)] // userInfoMember.Store = store // } // // fromUser, ok3 := fromUserMap[userInvite.FromUid] // if ok3 { // userInfoMember.FromUserInfo = fromUser // } // } // fromStore, ok4 := storeMap[userInfoMember.FromUserInfo.StoreId] // if ok4 { // userInfoMember.FromUserInfo.Store = &fromStore // } // inviteMembers = append(inviteMembers, userInfoMember) // } // // var inviteRecords []UserInviteRecord // //err = orm.Eloquent.Table("user_invite_record").Where("to_uid in (?)", toUids).Where("first!=1"). // // Where("scan=1").Order("id DESC").Find(&inviteRecords).Error // err = orm.Eloquent.Table("user_invite_record").Where("to_uid in (?)", toUids).Where("first!=1"). // Where("action=2").Order("id ASC").Find(&inviteRecords).Error // if err != nil { // logger.Error("invite record err:", err) // } // // for i, _ := range inviteRecords { // fromUser, ok3 := fromUserMap[inviteRecords[i].FromUid] // if ok3 { // inviteRecords[i].ShopAssistantName = fromUser.ShopAssistantName // } // } // // UserInviteRecordListSetAssistantName(inviteRecords) // // inviteRecordMap := make(map[uint32][]UserInviteRecord, 0) // for i, _ := range inviteRecords { // v, ok := inviteRecordMap[inviteRecords[i].ToUid] // if ok { // if len(v) >= 2 { // continue // } // } // if inviteRecords[i].SpendType == 3 && inviteRecords[i].Scan == 0 { // inviteRecords[i].ShopAssistantName = "自动续费" // } // // inviteRecordMap[inviteRecords[i].ToUid] = append(inviteRecordMap[inviteRecords[i].ToUid], inviteRecords[i]) // } // // fileName := "邀请会员" // if storeId == 0 { // fileName = "全部门店邀请会员" // } else { // store, err := GetStore(storeId) // if err != nil { // logger.Error("get store err:", err) // return "" // } // fileName = store.Name // } // //url := "http://switch.deovo.com:8000/img/export/" // url := "http://39.108.188.218:8000/img/export/" // // fileName = time.Now().Format(TimeFormat) + fileName + ".xlsx" // // file := excelize.NewFile() // streamWriter, err := file.NewStreamWriter("Sheet1") // if err != nil { // fmt.Println(err) // } // // //headline := []string{"门店名称", "店员id", "店员昵称","姓名", "会员id", "会员昵称", "注册会员时间", "会员状态"} // //headline := []string{"门店名称", "店员id", "姓名", "会员id", "会员昵称", "会员等级", "注册会员时间", "会员状态"} // //headline := []string{"门店名称", "店员id", "店员姓名", "用户注册时间", "最近登录时间", "会员id", "会员昵称", "用户手机号", "会员等级", "注册会员时间", "会员状态"} // headline := []interface{}{"门店名称", "店员id", "店员姓名", "店员门店", "用户注册时间", "最近登录时间", "用户id", "用户昵称", "用户手机号", "会员等级", "注册会员时间", "会员状态", // "", "开通_店员id", "开通_店员名称", "开通_扫码时间", "", "续费_店员id", "续费_店员名称", "续费_扫码时间"} // if cooperativeId != 0 { // headline = []interface{}{"门店名称", "店员id", "店员姓名", "店员门店", "用户注册时间", "最近登录时间", "用户id", "会员等级", "注册会员时间", "会员状态", // "", "开通_店员id", "开通_店员名称", "开通_扫码时间", "", "续费_店员id", "续费_店员名称", "续费_扫码时间"} // } // // cell, _ := excelize.CoordinatesToCellName(1, 1) // if err = streamWriter.SetRow(cell, headline); err != nil { // fmt.Println(err) // } // // for rowId := 0; rowId < len(inviteMembers); rowId++ { // invite := inviteMembers[rowId] // // fromStoreName := "" // if invite.FromUserInfo.Store != nil { // fromStoreName = invite.FromUserInfo.Store.Name // } // // record := []interface{}{} // if cooperativeId != 0 { // record = []interface{}{invite.Store.Name, fmt.Sprintf("%d", invite.FromUserInfo.Uid), // invite.FromUserInfo.ShopAssistantName, fromStoreName, // invite.ToUserInfo.CreatedAt.Format(TimeFormat), invite.ToUserInfo.LastLoginAt.Format(TimeFormat), // fmt.Sprintf("%d", invite.ToUserInfo.Uid), MemberLevelToString(invite.UserInvite.MemberLevel), // invite.UserInvite.MemberOpenTime.Format(TimeFormat), // GetUserInviteStatus(invite.MemberStatus)} // } else { // record = []interface{}{invite.Store.Name, fmt.Sprintf("%d", invite.FromUserInfo.Uid), // invite.FromUserInfo.ShopAssistantName, fromStoreName, // invite.ToUserInfo.CreatedAt.Format(TimeFormat), invite.ToUserInfo.LastLoginAt.Format(TimeFormat), // fmt.Sprintf("%d", invite.ToUserInfo.Uid), invite.ToUserInfo.WxName, invite.ToUserInfo.Tel, MemberLevelToString(invite.UserInvite.MemberLevel), // invite.UserInvite.MemberOpenTime.Format(TimeFormat), // GetUserInviteStatus(invite.MemberStatus)} // } // userInviteRecordList, ok := inviteRecordMap[invite.ToUid] // if ok { // for i, _ := range userInviteRecordList { // if i == 0 && userInviteRecordList[i].SpendType != 2 { // record = append(record, []interface{}{"", "", "", ""}...) // } // record = append(record, []interface{}{"", userInviteRecordList[i].FromUid, userInviteRecordList[i].ShopAssistantName, userInviteRecordList[i].CreatedAt.Format(TimeFormat)}...) // } // } // // cell, _ := excelize.CoordinatesToCellName(1, rowId+2) // if err := streamWriter.SetRow(cell, record); err != nil { // fmt.Println(err) // } // } // // if err := streamWriter.Flush(); err != nil { // fmt.Println(err) // } // if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil { // //if err := file.SaveAs("./" + fileName); err != nil { // fmt.Println(err) // } // // return url + fileName //} // //func GetUserInviteStatus(status uint8) string { // switch status { // case 1: // return "未注册" // case 2: // return "已注册" // case 3: // return "取消会员" // } // return "" //} // //func IsUserInfoByUid(uid uint32) (bool, error) { // //userInfo := new(UserInfo) // var count int64 // err := orm.Eloquent.Debug().Table("user").Where("uid = ?", uid).Count(&count).Error // if err != nil { // logger.Error("err:", err) // return false, err // } // if count == 0 { // return true, errors.New("user not exist") // } // return true, nil //} // //func GetUserInfoByUid(uid uint32) (UserInfo, error) { // //userInfo := new(UserInfo) // var userInfo UserInfo // err := orm.Eloquent.Debug().Table("user").Where("uid = ?", uid).Find(&userInfo).Error // if err != nil { // logger.Error("err:", err) // return userInfo, err // } // return userInfo, nil //} // //type UserDepositRefundRecordListReq struct { // //StoreId uint32 `json:"store_id"` // 门店id // Uid uint32 `json:"uid"` // 用户id // PageNum int `json:"pageIndex"` // PageSize int `json:"pageSize"` // Status uint32 `json:"status"` //} //type UserDepositRefundRecordListResp struct { // List []DepositRefundRecord `json:"list"` // Count uint32 `json:"count"` // PageNum int `json:"pageIndex"` //} // //func (m *UserDepositRefundRecordListReq) DepositRefundRecordList() (*UserDepositRefundRecordListResp, error) { // qs := orm.Eloquent.Table("deposit_refund_record") // if m.Status != 0 { // qs = qs.Where("status=?", m.Status) // } // if m.Uid != 0 { // qs = qs.Where("uid=?", m.Uid) // } // page := m.PageNum - 1 // if page < 0 { // page = 0 // } // if m.PageSize == 0 { // m.PageSize = 10 // } // resp := &UserDepositRefundRecordListResp{PageNum: m.PageNum} // var count int64 // err := qs.Count(&count).Error // if err != nil { // logger.Error("count err:", err) // return resp, err // } // resp.Count = uint32(count) // // var depositRefunds []DepositRefundRecord // err = qs.Order("status ASC").Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&depositRefunds).Error // if err != nil { // logger.Error("err:", err) // return resp, err // } // // resp.List = depositRefunds // // return resp, nil //} // //type GroupSendMessageCreateTemplateListReq struct { // Status uint32 `json:"status"` // 1-待发送 2-已发送 // Title string `json:"title"` // PageNum int `json:"pageIndex"` // PageSize int `json:"pageSize"` //} //type GroupSendMessageCreateTemplateListResp struct { // List []GroupSendMessageTemplate `json:"list"` // Count uint32 `json:"count"` // PageNum int `json:"pageIndex"` //} // //func (m *GroupSendMessageCreateTemplateListReq) List() (*GroupSendMessageCreateTemplateListResp, error) { // qs := orm.Eloquent.Table("group_send_message_template") // if m.Status != 0 { // qs = qs.Where("status=?", m.Status) // } // if m.Title != "" { // qs = qs.Where("title LIKE '%" + m.Title + "%'") // } // // page := m.PageNum - 1 // if page < 0 { // page = 0 // } // if m.PageSize == 0 { // m.PageSize = 10 // } // resp := &GroupSendMessageCreateTemplateListResp{PageNum: m.PageNum} // var count int64 // err := qs.Count(&count).Error // if err != nil { // logger.Error("count err:", err) // return resp, err // } // resp.Count = uint32(count) // // var groupSends []GroupSendMessageTemplate // err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&groupSends).Error // if err != nil && err != RecordNotFound { // logger.Error("err:", err) // return resp, err // } // resp.List = groupSends // // return resp, nil //} // //func CreateInviteMemberReport() { // if time.Now().Day() != 1 { // return // } // var cooperatives []CooperativeBusiness // err := orm.Eloquent.Table("cooperative_business").Find(&cooperatives).Error // if err != nil { // logger.Error("cooperative err:", err) // return // } // for i, _ := range cooperatives { // cooperatives[i].InviteMemberReport() // } //} // //func (m *CooperativeBusiness) InviteMemberReport() { // var users []UserInfo // err := orm.Eloquent.Table("user").Where("cooperative_business_id=?", m.ID).Find(&users).Error // if err != nil { // logger.Error("cooperative err:", err) // return // } // for i, _ := range users { // m.UserInviteReport(users[i]) // } //} // //func (m *CooperativeBusiness) UserInviteReport(userInfo UserInfo) { // end := InDayZero(1) // start := end.AddDate(0, -1, 0) // // var userInvites []UserInvite // qs := orm.Eloquent.Table("user_invite").Where("from_uid=?", userInfo.Uid). // Where("member_status=?", 2).Where("user_type=?", 2). // Where("member_open_time>?", start).Where("member_open_time 0 { // // memberReport[len(memberReport)-1].GoldDeduct = cooperative.CooperativeAssistantMemberDeduct.GoldDeduct // // memberReport[len(memberReport)-1].PlatinumDeduct = cooperative.CooperativeAssistantMemberDeduct.PlatinumDeduct // // memberReport[len(memberReport)-1].BlackGoldDeduct = cooperative.CooperativeAssistantMemberDeduct.BlackGoldDeduct // // // // report := memberReport[len(memberReport)-1] // // fmt.Println("report:", report) // // memberReport[len(memberReport)-1].DeductAmount += report.GoldCount * report.GoldDeduct // // memberReport[len(memberReport)-1].DeductAmount += report.PlatinumCount * report.PlatinumDeduct // // memberReport[len(memberReport)-1].DeductAmount += report.BlackGoldCount * report.BlackGoldDeduct // //} // memberReport = InviteMemberReportListSetUser(memberReport) // return memberReport, count, nil //} // //func InviteMemberReportListSetUser(list []InviteMemberReport) []InviteMemberReport { // ids := make([]uint32, 0, len(list)) // for i, _ := range list { // ids = append(ids, list[i].Uid) // } // if len(ids) == 0 { // return list // } // // infoMap, err := GetUserInfoMap(ids) // if err != nil { // logger.Error("user info map err:", err) // return list // } // // for i, _ := range list { // v, ok := infoMap[list[i].Uid] // if ok { // list[i].UserInfo = &v // } // fmt.Println("UserInfo:", v) // } // // return list //} // //func InviteMemberReportListSetStore(list []InviteMemberReport) []InviteMemberReport { // ids := make([]uint32, 0, len(list)) // for i, _ := range list { // ids = append(ids, list[i].StoreId) // } // if len(ids) == 0 { // return list // } // storeMap := GetStoreMapByIds(ids) // //infoMap, err := GetUserInfoMap(ids) // //if err != nil { // // logger.Error("user info map err:", err) // // return list // //} // // for i, _ := range list { // v, ok := storeMap[uint64(list[i].StoreId)] // if ok { // list[i].Store = v // } // fmt.Println("UserInfo:", v) // } // // return list //} // //func GetCooperativeBusinessId(c *gin.Context) (uint32, error) { // data, _ := c.Get(jwtauth.JwtPayloadKey) // sysUid, ok := data.(jwtauth.MapClaims)["identity"] // if !ok { // logger.Error("sys uid err") // app.Error(c, http.StatusInternalServerError, errors.New("sys uid err"), "查询失败") // return 0, errors.New("sys uid err") // } // sysUser, err := GetSysUser(sysUid) // if err != nil { // logger.Error("sys user err:", err) // app.Error(c, http.StatusInternalServerError, err, "查询失败") // return 0, err // } // //req.CooperativeBusinessId = sysUser.CooperativeBusinessId // return sysUser.CooperativeBusinessId, nil //} // //func GetSysUserByCtx(c *gin.Context) (*SysUser, error) { // //data, _ := c.Get(jwtauth.JwtPayloadKey) // //sysUid, ok := data.(jwtauth.MapClaims)["identity"] // //if !ok { // // logger.Error("sys uid err") // // app.Error(c, http.StatusInternalServerError, errors.New("sys uid err"), "查询失败") // // return nil, errors.New("sys uid err") // //} // //sysUser, err := GetSysUser(sysUid) // //if err != nil { // // logger.Error("sys user err:", err) // // app.Error(c, http.StatusInternalServerError, err, "查询失败") // // return nil, err // //} // //req.CooperativeBusinessId = sysUser.CooperativeBusinessId // //return &sysUser, nil // // data, _ := c.Get(jwtauth.JwtPayloadKey) // mapClaims := data.(jwtauth.MapClaims) // sysUid := float64(0) // if v, ok := mapClaims["identity"]; ok { // sysUid = v.(float64) // } // //fmt.Println("sysUid:", sysUid) // // //req.SysUid = fmt.Sprintf("%.0f", sysUid) // var sysUser SysUser // err := orm.Eloquent.Table("sys_user").Where("user_id=?", uint32(sysUid)).Find(&sysUser).Error // if err != nil { // logger.Error("sys user err:", err) // app.Error(c, http.StatusInternalServerError, err, "操作失败") // return &sysUser, err // } // return &sysUser, nil //} // ////type CooperativeStockExportReq struct { //// CooperativeBusinessId uint32 `json:"cooperative_business_id"` //// StoreId uint32 `json:"store_id"` // 门店id ////} //// ////func (r *CooperativeStockExportReq) Export() { //// ////} ////OrderType: 1-物流支付 2-取消物流租卡 3-滞纳金 4-收回卡 5-退物流费 6-商城购物 7-购买商品取消订单 8-购买商品订单退货 // //// gen:qs //type UserOpenMemberRecord struct { // Model // // Uid uint32 `json:"uid" gorm:"index"` // OpenNo string `json:"open_no" gorm:"index"` // OrderId uint32 `json:"order_id" gorm:"index"` // OrderType uint32 `json:"order_type"` // MemberLevel uint32 `json:"member_level"` // MemberExpire time.Time `json:"member_expire"` // 会员到期时间 // // Order *Order `json:"order" gorm:"-"` // ShareCardRetrieve *ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"` // GoodsOrder *GoodsOrder `json:"goods_order" gorm:"-"` // //Attach string `json:"attach"` //} // //func (o *UserOpenMemberRecord) TableName() string { // return "user_open_member_record" //} // //func (m *UserOpenMemberRecord) Refund(outTradeNo string, amount uint32) error { // configInfo, err := PayConfigInfo() // if err != nil { // logger.Error("config info err:", err) // return err // } // //configInfo.NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay_refund/notice" // err = orm.Eloquent.Create(m).Error // //err = m.Insert() // if err != nil { // logger.Error("insert user open member record err:", err) // return err // } // // orderRefund := pay.OrderRefund{ // OutTradeNo: outTradeNo, // OutRefundNo: m.OpenNo, // NotifyUrl: configInfo.RefundNotifyUrl, // Amount: pay.OrderRefundAmount{ // Refund: amount, // Total: amount, // Currency: "CNY", // }, // } // err = pay.TransactionOrderRefund(orderRefund) // if err != nil { // logger.Error("err:", err) // return err // } // // return nil //} // //func (m *UserOpenMemberRecord) MallGoodsOrderRefund(outTradeNo string) error { // if m.GoodsOrder == nil { // return errors.New("goods order is nil") // } // if m.OpenNo == "" { // m.OpenNo = GetOrderSn() // } // m.Uid = uint32(m.GoodsOrder.Uid) // m.OrderId = m.GoodsOrder.ID // // err := m.Refund(outTradeNo, m.GoodsOrder.Rm) // if err != nil { // logger.Error("refund err:", err) // return err // } // // return nil //} // //func GetOrderSn() string { // var orderSn string // for { // //orderSn = utils.GetSerialNo32HEXString() // orderSn = utils.GenSerialNo() // var count int64 // err := orm.Eloquent.Table("user_open_member_record").Where("open_no=?", orderSn).Count(&count) // //count, err := NewUserOpenMemberRecordQuerySet(DB).OpenNoEq(orderSn).Count() // if err != nil { // logger.Error("err:", err) // } // if count == 0 { // break // } // } // return orderSn //} // //func (m *OperationLog) AddLog() { // defer func() { // if err := recover(); err != nil { // fmt.Println("recover err:", err) // } // }() // go func() { // err := orm.Eloquent.Create(m).Error // if err != nil { // logger.Error("create operation log err:") // } // }() //} // //func SendMessageMemberRenewal() { // // //user.MemberExpire.Before(utils.Now().AddDate(0, 1, 0)) // //start := TodayZero().AddDate(0, 1, 0) // ////end := start.AddDate(0, 0, 1) // //end := start // //fmt.Println("end:", end.Format(TimeFormat)) // //var users []UserInfo // //err := orm.Eloquent.Table("user").Where("member_level IN (2,4,5)").Where("member_expire < ?", end).Find(&users).Error // //if err != nil { // // logger.Error("cooperative err:", err) // // return // //} // fmt.Println("发送续费短息开始:") // // start := TodayZero().AddDate(0, 0, GetActivityRenewalConfig().PopTrap) // end := start.AddDate(0, 0, 1) // var users []UserInfo // err := orm.Eloquent.Table("user").Where("member_level IN (2,4,5)"). // Where("member_expire>?", start).Where("member_expire?", startDate). Where("open_member_time?", startDate). Where("member_expire?", time.Time{}). // Where("date=?", startDate.AddDate(0, 0, -1).Format(DateFormat)). // Find(&statisticDaily).Error //if err != nil { // logger.Error("increase err:", err) //} //fmt.Println("increase:", increase) //fmt.Println("expire:", expire) //net = increase - expire //accumulative = statisticDaily.Accumulative + increase err = orm.Eloquent.Table("user").Where("member_level=?", level). Where("member_expire>?", time.Now()).Count(&accumulative).Error if err != nil { logger.Error("increase err:%#v", err) } fmt.Println("net:", net) daily := &MemberStatisticDaily{ MemberLevel: level, Date: startDate.Format(DateFormat), DateTime: startDate, Increase: increase, Expire: expire, Net: net, Accumulative: accumulative, } err = orm.Eloquent.Create(&daily).Error if err != nil { logger.Error("create member statistic daily err:", err) } } type MemberStatisticDailyListReq struct { MemberLevel uint32 `json:"member_level"` //StartDate string `json:"start_date"` //EndDate string `json:"end_date"` StartDate time.Time `json:"start_date"` EndDate time.Time `json:"end_date"` Days uint32 `json:"days"` IsExport uint32 `json:"is_export"` // 1-导出 PageNum int `json:"pageIndex"` PageSize int `json:"pageSize"` } type MemberStatisticDailyListRsp struct { Count int64 `json:"count"` List []MemberStatisticDaily `json:"list"` PageIndex int `json:"pageIndex"` Url string `json:"url"` } func (m *MemberStatisticDailyListReq) List() (*MemberStatisticDailyListRsp, error) { rsp := &MemberStatisticDailyListRsp{ PageIndex: m.PageNum, } m.PageNum = m.PageNum - 1 if m.PageNum < 0 { m.PageNum = 0 } if m.Days > 0 { m.PageSize = int(m.Days) } qs := orm.Eloquent.Table("member_statistic_daily") //if m.StartDate != "" { // start, _ := time.Parse(DateTimeFormat, m.StartDate) // qs = qs.Where("date_time>=?", start) //} //if m.EndDate != "" { // end, _ := time.Parse(DateTimeFormat, m.EndDate) // qs = qs.Where("date_time<=?", end) //} if !m.StartDate.IsZero() { qs = qs.Where("date_time>=?", m.StartDate) } if !m.EndDate.IsZero() { qs = qs.Where("date_time<=?", m.EndDate) } if m.Days > 0 { //end := TodayZero() //start := end.AddDate(0, 0, int(m.Days)*(-1)) qs = qs.Where("date_time>=?", m.StartDate) qs = qs.Where("date_time<=?", m.EndDate) } if m.MemberLevel != 0 { qs = qs.Where("member_level=?", m.MemberLevel) } var dailys []MemberStatisticDaily var count int64 err := qs.Count(&count).Error if err != nil { logger.Error("count err:", err) return rsp, err } rsp.Count = count //err = qs.Order("id DESC").Offset(m.PageNum * m.PageSize).Limit(m.PageSize).Find(&dailys).Error if m.IsExport == 1 { err = qs.Order("date_time DESC").Find(&dailys).Error if err != nil && err != RecordNotFound { logger.Error("dailys err:", err) return rsp, err } listExport, err := MemberStatisticDailyListExport(dailys) if err != nil { logger.Error("list export err:", err) } rsp.Url = listExport } else { err = qs.Order("date_time DESC").Offset(m.PageNum * m.PageSize).Limit(m.PageSize).Find(&dailys).Error if err != nil && err != RecordNotFound { logger.Error("dailys err:", err) return rsp, err } rsp.List = dailys } return rsp, nil } func MemberStatisticDailyListExport(dailys []MemberStatisticDaily) (string, error) { file := excelize.NewFile() streamWriter, err := file.NewStreamWriter("Sheet1") if err != nil { fmt.Println(err) } url := "http://39.108.188.218:8000/img/export/" fileName := "会员统计" + time.Now().Format("2006-01-02 15:04:05") + ".xlsx" title := []interface{}{"时间", "新增会员数", "会员过期数", "净增会员数", "累计会员数"} cell, _ := excelize.CoordinatesToCellName(1, 1) if err = streamWriter.SetRow(cell, title); err != nil { fmt.Println(err) } var row []interface{} for rowId := 0; rowId < len(dailys); rowId++ { row = []interface{}{dailys[rowId].Date, dailys[rowId].Increase, dailys[rowId].Expire, dailys[rowId].Net, dailys[rowId].Accumulative} cell, _ := excelize.CoordinatesToCellName(1, rowId+2) if err := streamWriter.SetRow(cell, row); err != nil { fmt.Println(err) } } if err := streamWriter.Flush(); err != nil { fmt.Println(err) } if err := file.SaveAs("/www/server/images/export/" + fileName); err != nil { fmt.Println(err) } return url + fileName, nil } func UserInviteRecordListSetAssistantName(records []UserInviteRecord) { uids := make([]uint32, 0, len(records)) for i, _ := range records { if records[i].ShopAssistantName == "" { uids = append(uids, records[i].FromUid) } } infoMap, err := GetUserInfoMap(uids) if err != nil { logger.Error("info map err:", err) } for i, _ := range records { v, ok := infoMap[records[i].FromUid] if ok && records[i].ShopAssistantName == "" { records[i].ShopAssistantName = v.ShopAssistantName } } } func GetSysUserByCtx(c *gin.Context) (*SysUser, error) { //data, _ := c.Get(jwtauth.JwtPayloadKey) //if data == nil { // return nil, errors.New("payload key err") //} //mapClaims := data.(jwtauth.MapClaims) //sysUid := float64(0) //if v, ok := mapClaims["identity"]; ok { // sysUid = v.(float64) //} //fmt.Println("sysUid:", sysUid) sysUid := float64(38) //req.SysUid = fmt.Sprintf("%.0f", sysUid) var sysUser SysUser err := orm.Eloquent.Table("sys_user").Where("user_id=?", uint32(sysUid)).Find(&sysUser).Error if err != nil { logger.Error("sys user err:", err) app.Error(c, http.StatusInternalServerError, err, "操作失败") return &sysUser, err } return &sysUser, nil } //func (m *MemberStatisticDailyListReq) Export() (string, error) { // qs := orm.Eloquent.Table("member_statistic_daily") // if !m.StartDate.IsZero() { // qs = qs.Where("date_time>=?", m.StartDate) // } // if !m.EndDate.IsZero() { // qs = qs.Where("date_time<=?", m.EndDate) // } // if m.Days > 0 { // qs = qs.Where("date_time>=?", m.StartDate) // qs = qs.Where("date_time<=?", m.EndDate) // } // if m.MemberLevel != 0 { // qs = qs.Where("member_level=?", m.MemberLevel) // } // var dailys []MemberStatisticDaily // err := qs.Order("date_time DESC").Find(&dailys).Error // if err != nil && err != RecordNotFound { // logger.Error("dailys err:", err) // return "", err // } // // file := excelize.NewFile() // streamWriter, err := file.NewStreamWriter("Sheet1") // if err != nil { // fmt.Println(err) // } // // url := "http://39.108.188.218:8000/img/export/" // fileName := "/www/server/images/export/" + "会员统计" + time.Now().Format("2006-01-02 15:04:05") + ".xlsx" // // title := []interface{}{"时间", "新增会员数", "会员过期数", "净增会员数", "累计会员数"} // cell, _ := excelize.CoordinatesToCellName(1, 1) // if err = streamWriter.SetRow(cell, title); err != nil { // fmt.Println(err) // } // var row []interface{} // for rowId := 0; rowId < len(dailys); rowId++ { // row = []interface{}{dailys[rowId].Date, dailys[rowId].Increase, dailys[rowId].Expire, dailys[rowId].Net, dailys[rowId].Accumulative} // cell, _ := excelize.CoordinatesToCellName(1, rowId+2) // if err := streamWriter.SetRow(cell, row); err != nil { // fmt.Println(err) // } // } // if err := streamWriter.Flush(); err != nil { // fmt.Println(err) // } // if err := file.SaveAs(fileName); err != nil { // fmt.Println(err) // } // return url + fileName, nil //}