From c4d5ac06d8b9adfae8b00f64eb23d6db4a3f4a92 Mon Sep 17 00:00:00 2001 From: li Date: Thu, 29 Sep 2022 15:49:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=BF=90=E8=B4=B9=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/server.go | 3 +- controller/activity.go | 189 ++++- controller/game_card.go | 168 +++- controller/order.go | 136 +++- lib/wxpay/wx_pay.go | 1 + model/analyse.go | 25 +- model/autogenerated_analyse.go | 1402 ++++++++++++++++++++++++++++++++ model/autogenerated_user.go | 750 +++++++++++++++++ model/config.go | 47 +- model/coupon.go | 6 +- model/game_card.go | 14 +- model/model_test.go | 82 +- model/order.go | 2 + model/store.go | 28 + model/user.go | 13 +- router/router_app.go | 7 +- 16 files changed, 2787 insertions(+), 86 deletions(-) diff --git a/cmd/server.go b/cmd/server.go index c50b3dd..f446be5 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -7,7 +7,6 @@ import ( "github.com/spf13/cobra" "mh-server/config" "mh-server/lib/auth" - //"mh-server/lib/sms" "mh-server/lib/utils" "mh-server/model" "mh-server/router" @@ -18,7 +17,7 @@ func runServer() { gin.SetMode(gin.DebugMode) router.ConfigAppRouter(server) - //OrderCancelId() + err := server.Run(fmt.Sprintf(":%d", config.AppConfig.ServerPort)) if err != nil { logger.Error(err) diff --git a/controller/activity.go b/controller/activity.go index 40e0e01..bc82afb 100644 --- a/controller/activity.go +++ b/controller/activity.go @@ -1,12 +1,14 @@ package controller import ( + "errors" "fmt" "github.com/codinl/go-logger" "github.com/gin-gonic/gin" "mh-server/lib/auth" "mh-server/lib/status" "mh-server/lib/utils" + "mh-server/lib/wxpay" "mh-server/model" "time" ) @@ -81,7 +83,8 @@ func UserMemberRenewalState(c *gin.Context) { if err == model.RecordNotFound || uint32(user.MemberExpire.Unix()) != activityMemberRenewal.MemberSerial { //if user.MemberExpire.Before(utils.Now().AddDate(0, 1, 0)) && // user.MemberExpire.After(utils.Now()) { - if user.MemberExpire.Before(utils.Now().AddDate(0, 0, model.GetActivityRenewalConfig().PopTrap)) { + if user.MemberExpire.Before(utils.Now().AddDate(0, 0, + model.GetActivityRenewalConfig().PopTrap)) { activityMemberRenewal = model.ActivityMemberRenewal{ ActivityId: 1, Uid: uc.Uid, @@ -114,7 +117,8 @@ func UserMemberRenewalState(c *gin.Context) { isPop = false } } - if activityMemberRenewal.StartTime.AddDate(0, 0, model.GetActivityRenewalConfig().ActivityContinuity).Before(utils.Now()) { + if activityMemberRenewal.StartTime.AddDate(0, 0, + model.GetActivityRenewalConfig().ActivityContinuity).Before(utils.Now()) { activityMemberRenewal.State = 3 _, err = model.NewActivityMemberRenewalQuerySet(model.DB).IDEq(activityMemberRenewal.ID).GetUpdater(). SetState(3).UpdateNum() @@ -322,6 +326,187 @@ func UserMemberRenewalCouponDraw(c *gin.Context) { return } +func PostagePackageBuy(c *gin.Context) { + //req := struct { + //}{} + //if err := c.ShouldBindJSON(&req); err != nil { + // logger.Error(err) + // RespJson(c, status.BadRequest, nil) + // return + //} + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + //uc = new(auth.UserClaims) + //uc.Uid = 14531402 + user := model.GetUserByUid(uc.Uid) + if user == nil { + logger.Error("user is nil") + RespJson(c, status.InternalServerError, nil) + return + } + if !user.IsMember() || user.MemberExpire.Before(time.Now()) { + logger.Error("user not member") + RespJson(c, status.NotMember, nil) + return + } + info, err := model.PostagePackageFeeConfigInfo() + if err != nil { + logger.Error("postage package fee err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + orderSn := model.GetOrderSn() + err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: user.MemberLevel, + OrderType: 11, UserCouponId: 0}.Insert() + if err != nil { + logger.Error(errors.New("web pay err")) + RespJson(c, status.InternalServerError, nil) + return + } + configInfo, err := model.PayConfigInfo() + if err != nil { + logger.Error(err) + RespJson(c, status.InternalServerError, nil) + return + } + webPay, err := wxpay.WebPay(orderSn, info.PostagePackageFee, user.WxOpenID, "N", wxpay.WxPayPostagePackage, configInfo.NotifyUrl) + if err != nil { + logger.Error(errors.New("web pay err")) + RespJson(c, status.InternalServerError, nil) + return + } + go func() { + action, err := model.IsFirstUserAction(uc.Uid, 2) + if err != nil { + logger.Error("user action exist err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + first := uint32(0) + if !action { + first = 1 + } + log := &model.UserActionLog{ + Uid: uc.Uid, + ActionType: 2, + First: first, + } + err = model.DB.Create(log).Error + if err != nil { + logger.Error("create user action log err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + }() + tips := fmt.Sprintf("支付成功,会员已延长%d天", model.GetPostagePackageMemberDuration(user.MemberLevel)) + ret := map[string]interface{}{ + "web_pay": webPay, + "tip": tips, + } + RespOK(c, ret) + return +} + +func UserCouponList(c *gin.Context) { + req := struct { + PageIdx int `json:"page_idx"` + PageSize int `json:"page_size"` + ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号 3-运费包 + }{} + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error(err) + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + logger.Error("uc is nil") + RespJson(c, status.Unauthorized, nil) + return + } + //uc = &auth.UserClaims{Uid: 87564738} + + page := req.PageIdx - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + + qs := model.NewUserCouponQuerySet(model.DB).UidEq(uc.Uid).StateEq(1) + if req.ActivityType != 0 { + qs = qs.ActivityTypeEq(3) + } + count, err := qs.Count() + if err != nil { + logger.Error("count err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + totalPage := count/req.PageSize + 1 + + var coupons []model.UserCoupon + err = qs.OrderAscByID().Offset(page * req.PageSize).Limit(req.PageSize).All(&coupons) + if err != nil && err != model.RecordNotFound { + logger.Error(err) + RespJson(c, status.InternalServerError, nil) + return + } + + ret := map[string]interface{}{ + "list": coupons, + "total_page": totalPage, + "page_idx": req.PageIdx, + } + RespOK(c, ret) + return +} + +func PostagePackageInfo(c *gin.Context) { + //req := struct { + //}{} + //if err := c.ShouldBindJSON(&req); err != nil { + // logger.Error(err) + // RespJson(c, status.BadRequest, nil) + // return + //} + uc := auth.GetCurrentUser(c) + if uc == nil { + logger.Error("uc is nil") + RespJson(c, status.Unauthorized, nil) + return + } + action, err := model.IsFirstUserAction(uc.Uid, 1) + if err != nil { + logger.Error("user action exist err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + first := uint32(0) + if !action { + first = 1 + } + log := model.UserActionLog{ + Uid: uc.Uid, + ActionType: 1, + First: first, + } + err = model.DB.Create(log).Error + if err != nil { + logger.Error("create user action log err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, nil) + return +} + func MemberRenewalUserCouponList(c *gin.Context) { req := struct { PageIdx int `json:"page_idx"` diff --git a/controller/game_card.go b/controller/game_card.go index 7295a1a..81e36bf 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -344,13 +344,31 @@ func PushWXPayNotice(c *gin.Context) { if err != nil { begin.Rollback() logger.Error("err:", err) - // 库存不足取消订单 - orderSn := model.GetOrderSn() - memberRecord := &model.UserOpenMemberRecord{OpenNo: orderSn, OrderType: 2, Order: &order} - err = memberRecord.OrderRefund(notifyInfo.OutTradeNo) - if err != nil { - logger.Error("err:", err) - return + if order.PostageType == 1 { + // 库存不足取消订单 + orderSn := model.GetOrderSn() + memberRecord := &model.UserOpenMemberRecord{OpenNo: orderSn, OrderType: 2, Order: &order} + err = memberRecord.OrderRefund(notifyInfo.OutTradeNo) + if err != nil { + logger.Error("err:", err) + return + } + } + + // TODO + if order.PostageType == 2 { + var userCoupon model.UserCoupon + err = model.NewUserCouponQuerySet(model.DB).ActivityTypeEq(3).UidEq(uint32(order.Uid)). + StateEq(2).OrderAscByID().Limit(1).One(&userCoupon) + if err != nil && err != model.RecordNotFound { + logger.Error("user coupon err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + err = model.NewUserCouponQuerySet(model.DB).IDEq(userCoupon.ID).GetUpdater().SetState(1).Update() + if err != nil { + logger.Error("user coupon err:", err) + } } //err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert() @@ -409,7 +427,9 @@ func PushWXPayNotice(c *gin.Context) { fundRecord.FundType = model.FundTypeExpressFee fundRecord.Remark = "借卡邮费" - } else if notifyInfo.Attach == wxpay.WxPayMember { + } + + if notifyInfo.Attach == wxpay.WxPayMember { logger.Info("开通会员 支付成功:") logger.Info("用户uid:", notifyInfo.OutTradeNo) @@ -643,7 +663,9 @@ func PushWXPayNotice(c *gin.Context) { fmt.Println("notify.TotalFee:", notifyInfo.TotalFee) fmt.Println("notify.OutTradeNo:", notifyInfo.OutTradeNo) - } else if notifyInfo.Attach == wxpay.WxPayDeposit { + } + + if notifyInfo.Attach == wxpay.WxPayDeposit { record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo} err := record.GetByOpenNo() if err != nil { @@ -694,7 +716,9 @@ func PushWXPayNotice(c *gin.Context) { logger.Error("update user open member record state:err", err) } //} - } else if notifyInfo.Attach == wxpay.WxPayBuyGoods { + } + + if notifyInfo.Attach == wxpay.WxPayBuyGoods { _, err = model.NewGoodsOrderQuerySet(model.DB).SerialNoEq(notifyInfo.OutTradeNo).GetUpdater(). SetPayTime(time.Now()). SetPayStatus(model.PayStatusOK). @@ -732,7 +756,9 @@ func PushWXPayNotice(c *gin.Context) { fundRecord.Uid = uint32(goodsOrder.Uid) fundRecord.FundType = model.FundTypeBuyGoods fundRecord.Remark = "商城购买" - } else if notifyInfo.Attach == wxpay.WxPayUpgradeMember { + } + + if notifyInfo.Attach == wxpay.WxPayUpgradeMember { record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo} err := record.GetByOpenNo() if err != nil { @@ -828,7 +854,9 @@ func PushWXPayNotice(c *gin.Context) { fundRecord.Uid = uint32(record.Uid) fundRecord.FundType = model.FundTypeUpgradeMember fundRecord.Remark = "升级会员" - } else if notifyInfo.Attach == wxpay.WxPayMemberExpireDelay { + } + + if notifyInfo.Attach == wxpay.WxPayMemberExpireDelay { record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo} err := record.GetByOpenNo() if err != nil { @@ -847,8 +875,8 @@ func PushWXPayNotice(c *gin.Context) { return } - _, err = model.NewUserMemberExpireDelayQuerySet(model.DB).UidEq(record.Uid).MemberExpireEq(user.MemberExpire).GetUpdater(). - SetIsPay(1).UpdateNum() + _, err = model.NewUserMemberExpireDelayQuerySet(model.DB).UidEq(record.Uid).MemberExpireEq(user.MemberExpire). + GetUpdater().SetIsPay(1).UpdateNum() if err != nil { logger.Error("err:", err) return @@ -860,7 +888,9 @@ func PushWXPayNotice(c *gin.Context) { fundRecord.Uid = uint32(record.Uid) fundRecord.FundType = model.FundTypeMemberExpireDelay fundRecord.Remark = "会员过期滞纳金" - } else if notifyInfo.Attach == wxpay.WxPayShareCardRetrieve { + } + + if notifyInfo.Attach == wxpay.WxPayShareCardRetrieve { record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo} err := record.GetByOpenNo() if err != nil { @@ -916,6 +946,114 @@ func PushWXPayNotice(c *gin.Context) { fundRecord.Remark = "共享卡收回卡快递费" } + if notifyInfo.Attach == wxpay.WxPayPostagePackage { + record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo} + err := record.GetByOpenNo() + if err != nil { + logger.Error("err:", err) + } + if record.State == 2 { + ret.ReturnCode = "SUCCESS" + RespBodyXML(c, ret) + return + } + var activity model.Activity + err = model.NewActivityQuerySet(model.DB).IDEq(3).One(&activity) + if err != nil { + logger.Error("coupon err:", err) + return + } + var coupon model.Coupon + err = model.NewCouponQuerySet(model.DB).ActivityTypeEq(activity.ActivityType).One(&coupon) + if err != nil { + logger.Error("coupon err:", err) + ret.ReturnCode = "Error" + RespBodyXML(c, ret) + return + } + + defer func() { + if err := recover(); err != nil { + logger.Error("err:", err) + } + }() + + //info, err := model.PostagePackageFeeConfigInfo() + //if err != nil { + // logger.Error("postage package fee config err") + // ret.ReturnCode = "Error" + // RespBodyXML(c, ret) + // return + //} + + //originalMemberConfig, err := model.GetMemberConfig(record.MemberLevel) + //if err != nil { + // logger.Error("err:", err) + // ret.ReturnCode = "Error" + // RespBodyXML(c, ret) + // return + //} + //days := (info.PostagePackageFee * 365) / originalMemberConfig.MemberFee + user := model.GetUserByUid(record.Uid) + days := model.GetPostagePackageMemberDuration(user.MemberLevel) + durationRecord := &model.UserMemberDurationRecord{ + Uid: record.Uid, + Duration: days, + EventType: 1, + MemberLevel: record.MemberLevel, + } + nowTime := time.Now() + + go func() { + begin := model.DB.Begin() + for i := 0; i < 10; i++ { + userCoupon := &model.UserCoupon{ + Uid: record.Uid, + CouponId: coupon.ID, + CouponType: coupon.CouponType, + ActivityType: activity.ActivityType, + ActivityId: activity.ID, + Value: coupon.Value, + State: 1, + ActiveStart: nowTime, + ActiveEnd: nowTime.AddDate(10, 0, 0), + MemberLevel: record.MemberLevel, + } + err = begin.Create(userCoupon).Error + if err != nil { + begin.Rollback() + logger.Error("user coupon err:", err) + return + } + } + + memberExpire := user.MemberExpire.AddDate(0, 0, int(days)) + err := model.NewUserQuerySet(begin).UidEq(record.Uid).GetUpdater().SetMemberExpire(memberExpire).Update() + if err != nil { + begin.Rollback() + logger.Error("update member expire err:", err) + return + } + + err = begin.Create(durationRecord).Error + if err != nil { + logger.Error("create duration record err:", err) + return + } + + err = begin.Commit().Error + if err != nil { + begin.Rollback() + logger.Error("commit err:", err) + return + } + }() + + fundRecord.Uid = uint32(record.Uid) + fundRecord.FundType = model.FundTypePostagePackageFee + fundRecord.Remark = "购买运费包" + } + fundRecord.Amount = int64(notifyInfo.TotalFee) fundRecord.TransactionId = notifyInfo.TransactionId fundRecord.OutTradeNo = notifyInfo.OutTradeNo diff --git a/controller/order.go b/controller/order.go index 5634437..0a655b7 100644 --- a/controller/order.go +++ b/controller/order.go @@ -160,10 +160,6 @@ var orderCreateLocker sync.Mutex // 创建订单 func RentCardOrderCreate(c *gin.Context) { - //type Goods struct { - // Price uint32 `json:"price"` - //} - req := struct { GameCardList []model.CardInfo `json:"game_card_list"` StoreId uint32 `json:"store_id"` @@ -171,6 +167,7 @@ func RentCardOrderCreate(c *gin.Context) { Price uint32 `json:"price"` DeliveryType uint8 `json:"delivery_type"` // 取货方式 ExpressFee uint32 `json:"express_fee"` + UserCouponId uint32 `json:"user_coupon_id"` }{} bodyString, err := ioutil.ReadAll(c.Request.Body) @@ -191,24 +188,16 @@ func RentCardOrderCreate(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - //if err := c.ShouldBindJSON(&req);err != nil { - // logger.Error(err) - // RespJson(c,status.BadRequest,nil) - // return - //} fmt.Println("商品下单 req:", req) - //uc := &struct { - // Uid uint32 `json:"uid"` - //}{} uc := auth.GetCurrentUser(c) if uc == nil { logger.Error("uc is nil") RespJson(c, status.BadRequest, nil) return } - //uc.Uid = 62389201 + user := model.GetUserByUid(uc.Uid) if user == nil { logger.Error(errors.New("GetUserByUid err")) @@ -228,8 +217,7 @@ func RentCardOrderCreate(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - //fmt.Println("Deposit:", user.Deposit) - //fmt.Println("MemberDeposit:", memberConfig.MemberDeposit) + if user.Deposit != memberConfig.MemberDeposit { logger.Error(errors.New("user deposit 0")) RespJson(c, status.OrderUnpaidDeposit, nil) @@ -240,16 +228,15 @@ func RentCardOrderCreate(c *gin.Context) { for _, v := range req.GameCardList { cardCount += v.Count } - //fmt.Println("cardCount:", cardCount) + rentCard := model.GetUserRentCard(uc.Uid) if rentCard == nil { //logger.Error(errors.New("GetUserByUid err")) //RespJson(c, status.InternalServerError, nil) //return - //fmt.Println("CardMax", memberConfig.CardMax) rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax} } - //fmt.Println("rentCard", rentCard.CanRentCount) + if uc.Uid == 15304136 || uc.Uid == 45935373 { rentCard.CanRentCount -= 1 } @@ -317,6 +304,21 @@ func RentCardOrderCreate(c *gin.Context) { Postage: req.ExpressFee, CooperativeBusinessId: store.CooperativeBusinessId, CooperativeName: store.CooperativeName, + PostageType: 1, + } + var userCoupon model.UserCoupon + //err = model.NewUserCouponQuerySet(model.DB).ActivityTypeEq(3).UidEq(uc.Uid).StateEq(1). + // OrderAscByID().Limit(1).One(&userCoupon) + err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&userCoupon) + if err != nil && err != model.RecordNotFound { + logger.Error("user coupon err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + if err == nil && userCoupon.Uid == uc.Uid && + userCoupon.State == 1 && userCoupon.ActivityType == 3 { + req.Price = 0 + order.PostageType = 2 } // 以支付成功作为订单下单成功的依据,不是订单创建 已修改 @@ -396,6 +398,15 @@ func RentCardOrderCreate(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } + if userCoupon.ID != 0 { + err = model.NewUserCouponQuerySet(tx).IDEq(userCoupon.ID).GetUpdater().SetState(2).Update() + if err != nil { + tx.Rollback() + logger.Error("update user coupon state err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + } err = tx.Commit().Error if err != nil { tx.Rollback() @@ -463,7 +474,7 @@ func RentCardOrderCreate(c *gin.Context) { } //orderId := fmt.Sprintf("%d", order.ID) - ////orderId = "100000" + //orderId = "100000" //fmt.Println("orderId", orderId) //fmt.Println("Price", req.Price) //fmt.Println("WxOpenID", user.WxOpenID) @@ -669,6 +680,7 @@ func OrderAmount(c *gin.Context) { StoreId uint32 `json:"store_id" binding:"required"` UserAddressId uint32 `json:"user_address_id" binding:"required"` Price uint32 `json:"price" ` + UserCouponId uint32 `json:"user_coupon_id"` }{} if err := c.ShouldBindJSON(&req); err != nil { logger.Error("ShouldBindJSON err:", err) @@ -676,6 +688,13 @@ func OrderAmount(c *gin.Context) { return } + uc := auth.GetCurrentUser(c) + if uc == nil { + logger.Error("uc is nil") + RespJson(c, status.Unauthorized, nil) + return + } + var ( eg errgroup.Group userAddress = &model.UserAddress{} @@ -706,16 +725,47 @@ func OrderAmount(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - + //model.UserCoupon{} expressFee := model.ExpressFeeProvince //if userAddress.Province != "广东省" { if userAddress.Province != store.Province { expressFee = model.ExpressFeeOutsideProvince } + hasPostagePackage := 0 + if req.UserCouponId != 0 { + var userCoupon model.UserCoupon + err := model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&userCoupon) + if err != nil { + logger.Error("user coupon err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + if userCoupon.State == 1 && userCoupon.ActivityType == 3 && userCoupon.Uid == uc.Uid { + expressFee = 0 + } + } else { + exist, err := model.QueryRecordExist(fmt.Sprintf("SELECT * FROM user_coupon WHERE uid=%d AND activity_type=3 AND state=1", uc.Uid)) + if err != nil { + logger.Error("user coupon err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + if !exist { + err := model.DB.Exec("UPDATE statistic SET count=count+1 WHERE event_type=1").Error + if err != nil { + logger.Error("update statistic err:", err) + } + hasPostagePackage = 1 + } + } + hasPostagePackage = 1 + ret := map[string]interface{}{ - "total_amount": req.Price + uint32(expressFee), - "express_fee": expressFee, + "total_amount": req.Price + uint32(expressFee), + "express_fee": expressFee, + "has_postage_package": hasPostagePackage, } RespOK(c, ret) return @@ -911,21 +961,37 @@ func OrderCancel(c *gin.Context) { order = orderInfo fmt.Println("order:", order) if isRecede { - outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID) - if err != nil { - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } - //m.OpenNo = model.GetOrderSn() - memberRecord := &model.UserOpenMemberRecord{OpenNo: model.GetOrderSn(), OrderType: 2, Order: &order} - err = memberRecord.OrderRefund(outTradeNo) - if err != nil { - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return + if order.PostageType == 1 { + outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + //m.OpenNo = model.GetOrderSn() + memberRecord := &model.UserOpenMemberRecord{OpenNo: model.GetOrderSn(), OrderType: 2, Order: &order} + err = memberRecord.OrderRefund(outTradeNo) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } } + if order.PostageType == 2 { + var userCoupon model.UserCoupon + err = model.NewUserCouponQuerySet(model.DB).ActivityTypeEq(3).UidEq(uint32(order.Uid)).StateEq(2). + OrderAscByID().Limit(1).One(&userCoupon) + if err != nil && err != model.RecordNotFound { + logger.Error("user coupon err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + err = model.NewUserCouponQuerySet(model.DB).IDEq(userCoupon.ID).GetUpdater().SetState(1).Update() + if err != nil { + logger.Error("user coupon err:", err) + } + } //orderSn := model.GetOrderSn() //err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert() //if err != nil { diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index 25b36c0..379c802 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -43,6 +43,7 @@ const ( WxPayUpgradeMember = "upgrade_member" // 多级会员 WxPayMemberExpireDelay = "member_expire_delay" // 会员过期滞纳金 WxPayShareCardRetrieve = "share_card_retrieve" // 收回卡 + WxPayPostagePackage = "postage_package" // 运费包 //WxPayExchangeGoods = "exchange_goods" // 兑换商品 //NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // 数据库配置 生产 diff --git a/model/analyse.go b/model/analyse.go index 39bd561..a0495c8 100644 --- a/model/analyse.go +++ b/model/analyse.go @@ -1,18 +1,18 @@ package model import ( + "fmt" "github.com/codinl/go-logger" "time" ) //go:generate goqueryset -in analyse.go - +// gen:qs type Statistic struct { Model - Count uint32 `json:"count"` // 计数 - Type uint32 `json:"type" gorm:"index"` // 类型:1- - + Count uint32 `json:"count" gorm:"default:0"` // 计数 + EventType uint32 `json:"event_type" gorm:"index"` // 类型:1-运费包曝光次数 } const ( @@ -50,7 +50,8 @@ func (l *UserRenewalLog) Add() error { func GetActionUserRenewalLog(uid, action uint32) (UserRenewalLog, error) { var userRenewalLog UserRenewalLog - err := NewUserRenewalLogQuerySet(DB).UidEq(uid).ActionEq(action).OrderDescByID().Limit(1).One(&userRenewalLog) + err := NewUserRenewalLogQuerySet(DB).UidEq(uid).ActionEq(action).OrderDescByID(). + Limit(1).One(&userRenewalLog) if err != nil && err != RecordNotFound { logger.Error("user renewal log err:", err) return userRenewalLog, err @@ -115,3 +116,17 @@ func (m *UserMemberRecord) Add() { } }() } + +// gen:qs +type UserActionLog struct { + Model + + Uid uint32 `json:"uid" gorm:"index"` + ActionType uint32 `json:"action_type"` // 1-运费包_领券送时长专题页 2-运费包_购买运费包 + First uint32 `json:"first"` // 1-首次 + // user_action_log +} + +func IsFirstUserAction(uid, actionType uint32) (bool, error) { + return QueryRecordExist(fmt.Sprintf("SELECT * FROM user_action_log WHERE uid=%d AND action_type=%d", uid, actionType)) +} diff --git a/model/autogenerated_analyse.go b/model/autogenerated_analyse.go index 673eca4..77f2b6c 100644 --- a/model/autogenerated_analyse.go +++ b/model/autogenerated_analyse.go @@ -12,6 +12,1272 @@ import ( // ===== BEGIN of all query sets +// ===== BEGIN of query set StatisticQuerySet + +// StatisticQuerySet is an queryset type for Statistic +type StatisticQuerySet struct { + db *gorm.DB +} + +// NewStatisticQuerySet constructs new StatisticQuerySet +func NewStatisticQuerySet(db *gorm.DB) StatisticQuerySet { + return StatisticQuerySet{ + db: db.Model(&Statistic{}), + } +} + +func (qs StatisticQuerySet) w(db *gorm.DB) StatisticQuerySet { + return NewStatisticQuerySet(db) +} + +func (qs StatisticQuerySet) Select(fields ...StatisticDBSchemaField) StatisticQuerySet { + names := []string{} + for _, f := range fields { + names = append(names, f.String()) + } + + return qs.w(qs.db.Select(strings.Join(names, ","))) +} + +// Create is an autogenerated method +// nolint: dupl +func (o *Statistic) Create(db *gorm.DB) error { + return db.Create(o).Error +} + +// Delete is an autogenerated method +// nolint: dupl +func (o *Statistic) Delete(db *gorm.DB) error { + return db.Delete(o).Error +} + +// All is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) All(ret *[]Statistic) error { + return qs.db.Find(ret).Error +} + +// Count is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) Count() (int, error) { + var count int + err := qs.db.Count(&count).Error + return count, err +} + +// CountEq is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountEq(count uint32) StatisticQuerySet { + return qs.w(qs.db.Where("count = ?", count)) +} + +// CountGt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountGt(count uint32) StatisticQuerySet { + return qs.w(qs.db.Where("count > ?", count)) +} + +// CountGte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountGte(count uint32) StatisticQuerySet { + return qs.w(qs.db.Where("count >= ?", count)) +} + +// CountIn is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountIn(count ...uint32) StatisticQuerySet { + if len(count) == 0 { + qs.db.AddError(errors.New("must at least pass one count in CountIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("count IN (?)", count)) +} + +// CountLt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountLt(count uint32) StatisticQuerySet { + return qs.w(qs.db.Where("count < ?", count)) +} + +// CountLte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountLte(count uint32) StatisticQuerySet { + return qs.w(qs.db.Where("count <= ?", count)) +} + +// CountNe is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountNe(count uint32) StatisticQuerySet { + return qs.w(qs.db.Where("count != ?", count)) +} + +// CountNotIn is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CountNotIn(count ...uint32) StatisticQuerySet { + if len(count) == 0 { + qs.db.AddError(errors.New("must at least pass one count in CountNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("count NOT IN (?)", count)) +} + +// CreatedAtEq is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CreatedAtEq(createdAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("created_at = ?", createdAt)) +} + +// CreatedAtGt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CreatedAtGt(createdAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("created_at > ?", createdAt)) +} + +// CreatedAtGte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CreatedAtGte(createdAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("created_at >= ?", createdAt)) +} + +// CreatedAtLt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CreatedAtLt(createdAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("created_at < ?", createdAt)) +} + +// CreatedAtLte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CreatedAtLte(createdAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("created_at <= ?", createdAt)) +} + +// CreatedAtNe is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) CreatedAtNe(createdAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("created_at != ?", createdAt)) +} + +// Delete is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) Delete() error { + return qs.db.Delete(Statistic{}).Error +} + +// DeleteNum is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeleteNum() (int64, error) { + db := qs.db.Delete(Statistic{}) + return db.RowsAffected, db.Error +} + +// DeleteNumUnscoped is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeleteNumUnscoped() (int64, error) { + db := qs.db.Unscoped().Delete(Statistic{}) + return db.RowsAffected, db.Error +} + +// DeletedAtEq is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtEq(deletedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at = ?", deletedAt)) +} + +// DeletedAtGt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtGt(deletedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at > ?", deletedAt)) +} + +// DeletedAtGte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtGte(deletedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at >= ?", deletedAt)) +} + +// DeletedAtIsNotNull is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtIsNotNull() StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at IS NOT NULL")) +} + +// DeletedAtIsNull is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtIsNull() StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at IS NULL")) +} + +// DeletedAtLt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtLt(deletedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at < ?", deletedAt)) +} + +// DeletedAtLte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtLte(deletedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at <= ?", deletedAt)) +} + +// DeletedAtNe is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) DeletedAtNe(deletedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) +} + +// EventTypeEq is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeEq(eventType uint32) StatisticQuerySet { + return qs.w(qs.db.Where("event_type = ?", eventType)) +} + +// EventTypeGt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeGt(eventType uint32) StatisticQuerySet { + return qs.w(qs.db.Where("event_type > ?", eventType)) +} + +// EventTypeGte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeGte(eventType uint32) StatisticQuerySet { + return qs.w(qs.db.Where("event_type >= ?", eventType)) +} + +// EventTypeIn is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeIn(eventType ...uint32) StatisticQuerySet { + if len(eventType) == 0 { + qs.db.AddError(errors.New("must at least pass one eventType in EventTypeIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("event_type IN (?)", eventType)) +} + +// EventTypeLt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeLt(eventType uint32) StatisticQuerySet { + return qs.w(qs.db.Where("event_type < ?", eventType)) +} + +// EventTypeLte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeLte(eventType uint32) StatisticQuerySet { + return qs.w(qs.db.Where("event_type <= ?", eventType)) +} + +// EventTypeNe is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeNe(eventType uint32) StatisticQuerySet { + return qs.w(qs.db.Where("event_type != ?", eventType)) +} + +// EventTypeNotIn is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) EventTypeNotIn(eventType ...uint32) StatisticQuerySet { + if len(eventType) == 0 { + qs.db.AddError(errors.New("must at least pass one eventType in EventTypeNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("event_type NOT IN (?)", eventType)) +} + +// GetDB is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) GetDB() *gorm.DB { + return qs.db +} + +// GetUpdater is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) GetUpdater() StatisticUpdater { + return NewStatisticUpdater(qs.db) +} + +// IDEq is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDEq(ID uint32) StatisticQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDGt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDGt(ID uint32) StatisticQuerySet { + return qs.w(qs.db.Where("id > ?", ID)) +} + +// IDGte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDGte(ID uint32) StatisticQuerySet { + return qs.w(qs.db.Where("id >= ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDIn(ID ...uint32) StatisticQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDLt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDLt(ID uint32) StatisticQuerySet { + return qs.w(qs.db.Where("id < ?", ID)) +} + +// IDLte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDLte(ID uint32) StatisticQuerySet { + return qs.w(qs.db.Where("id <= ?", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDNe(ID uint32) StatisticQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) IDNotIn(ID ...uint32) StatisticQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + +// Limit is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) Limit(limit int) StatisticQuerySet { + return qs.w(qs.db.Limit(limit)) +} + +// Offset is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) Offset(offset int) StatisticQuerySet { + return qs.w(qs.db.Offset(offset)) +} + +// One is used to retrieve one result. It returns gorm.ErrRecordNotFound +// if nothing was fetched +func (qs StatisticQuerySet) One(ret *Statistic) error { + return qs.db.First(ret).Error +} + +// OrderAscByCount is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderAscByCount() StatisticQuerySet { + return qs.w(qs.db.Order("count ASC")) +} + +// OrderAscByCreatedAt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderAscByCreatedAt() StatisticQuerySet { + return qs.w(qs.db.Order("created_at ASC")) +} + +// OrderAscByDeletedAt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderAscByDeletedAt() StatisticQuerySet { + return qs.w(qs.db.Order("deleted_at ASC")) +} + +// OrderAscByEventType is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderAscByEventType() StatisticQuerySet { + return qs.w(qs.db.Order("event_type ASC")) +} + +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderAscByID() StatisticQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + +// OrderAscByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderAscByUpdatedAt() StatisticQuerySet { + return qs.w(qs.db.Order("updated_at ASC")) +} + +// OrderDescByCount is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderDescByCount() StatisticQuerySet { + return qs.w(qs.db.Order("count DESC")) +} + +// OrderDescByCreatedAt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderDescByCreatedAt() StatisticQuerySet { + return qs.w(qs.db.Order("created_at DESC")) +} + +// OrderDescByDeletedAt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderDescByDeletedAt() StatisticQuerySet { + return qs.w(qs.db.Order("deleted_at DESC")) +} + +// OrderDescByEventType is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderDescByEventType() StatisticQuerySet { + return qs.w(qs.db.Order("event_type DESC")) +} + +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderDescByID() StatisticQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + +// OrderDescByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) OrderDescByUpdatedAt() StatisticQuerySet { + return qs.w(qs.db.Order("updated_at DESC")) +} + +// UpdatedAtEq is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) UpdatedAtEq(updatedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("updated_at = ?", updatedAt)) +} + +// UpdatedAtGt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) UpdatedAtGt(updatedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("updated_at > ?", updatedAt)) +} + +// UpdatedAtGte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) UpdatedAtGte(updatedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("updated_at >= ?", updatedAt)) +} + +// UpdatedAtLt is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) UpdatedAtLt(updatedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("updated_at < ?", updatedAt)) +} + +// UpdatedAtLte is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) UpdatedAtLte(updatedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("updated_at <= ?", updatedAt)) +} + +// UpdatedAtNe is an autogenerated method +// nolint: dupl +func (qs StatisticQuerySet) UpdatedAtNe(updatedAt time.Time) StatisticQuerySet { + return qs.w(qs.db.Where("updated_at != ?", updatedAt)) +} + +// SetCount is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) SetCount(count uint32) StatisticUpdater { + u.fields[string(StatisticDBSchema.Count)] = count + return u +} + +// SetCreatedAt is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) SetCreatedAt(createdAt time.Time) StatisticUpdater { + u.fields[string(StatisticDBSchema.CreatedAt)] = createdAt + return u +} + +// SetDeletedAt is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) SetDeletedAt(deletedAt *time.Time) StatisticUpdater { + u.fields[string(StatisticDBSchema.DeletedAt)] = deletedAt + return u +} + +// SetEventType is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) SetEventType(eventType uint32) StatisticUpdater { + u.fields[string(StatisticDBSchema.EventType)] = eventType + return u +} + +// SetID is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) SetID(ID uint32) StatisticUpdater { + u.fields[string(StatisticDBSchema.ID)] = ID + return u +} + +// SetUpdatedAt is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) SetUpdatedAt(updatedAt time.Time) StatisticUpdater { + u.fields[string(StatisticDBSchema.UpdatedAt)] = updatedAt + return u +} + +// Update is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) Update() error { + return u.db.Updates(u.fields).Error +} + +// UpdateNum is an autogenerated method +// nolint: dupl +func (u StatisticUpdater) UpdateNum() (int64, error) { + db := u.db.Updates(u.fields) + return db.RowsAffected, db.Error +} + +// ===== END of query set StatisticQuerySet + +// ===== BEGIN of Statistic modifiers + +// StatisticDBSchemaField describes database schema field. It requires for method 'Update' +type StatisticDBSchemaField string + +// String method returns string representation of field. +// nolint: dupl +func (f StatisticDBSchemaField) String() string { + return string(f) +} + +// StatisticDBSchema stores db field names of Statistic +var StatisticDBSchema = struct { + ID StatisticDBSchemaField + CreatedAt StatisticDBSchemaField + UpdatedAt StatisticDBSchemaField + DeletedAt StatisticDBSchemaField + Count StatisticDBSchemaField + EventType StatisticDBSchemaField +}{ + + ID: StatisticDBSchemaField("id"), + CreatedAt: StatisticDBSchemaField("created_at"), + UpdatedAt: StatisticDBSchemaField("updated_at"), + DeletedAt: StatisticDBSchemaField("deleted_at"), + Count: StatisticDBSchemaField("count"), + EventType: StatisticDBSchemaField("event_type"), +} + +// Update updates Statistic fields by primary key +// nolint: dupl +func (o *Statistic) Update(db *gorm.DB, fields ...StatisticDBSchemaField) error { + dbNameToFieldName := map[string]interface{}{ + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "count": o.Count, + "event_type": o.EventType, + } + u := map[string]interface{}{} + for _, f := range fields { + fs := f.String() + u[fs] = dbNameToFieldName[fs] + } + if err := db.Model(o).Updates(u).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return err + } + + return fmt.Errorf("can't update Statistic %v fields %v: %s", + o, fields, err) + } + + return nil +} + +// StatisticUpdater is an Statistic updates manager +type StatisticUpdater struct { + fields map[string]interface{} + db *gorm.DB +} + +// NewStatisticUpdater creates new Statistic updater +// nolint: dupl +func NewStatisticUpdater(db *gorm.DB) StatisticUpdater { + return StatisticUpdater{ + fields: map[string]interface{}{}, + db: db.Model(&Statistic{}), + } +} + +// ===== END of Statistic modifiers + +// ===== BEGIN of query set UserActionLogQuerySet + +// UserActionLogQuerySet is an queryset type for UserActionLog +type UserActionLogQuerySet struct { + db *gorm.DB +} + +// NewUserActionLogQuerySet constructs new UserActionLogQuerySet +func NewUserActionLogQuerySet(db *gorm.DB) UserActionLogQuerySet { + return UserActionLogQuerySet{ + db: db.Model(&UserActionLog{}), + } +} + +func (qs UserActionLogQuerySet) w(db *gorm.DB) UserActionLogQuerySet { + return NewUserActionLogQuerySet(db) +} + +func (qs UserActionLogQuerySet) Select(fields ...UserActionLogDBSchemaField) UserActionLogQuerySet { + names := []string{} + for _, f := range fields { + names = append(names, f.String()) + } + + return qs.w(qs.db.Select(strings.Join(names, ","))) +} + +// Create is an autogenerated method +// nolint: dupl +func (o *UserActionLog) Create(db *gorm.DB) error { + return db.Create(o).Error +} + +// Delete is an autogenerated method +// nolint: dupl +func (o *UserActionLog) Delete(db *gorm.DB) error { + return db.Delete(o).Error +} + +// ActionTypeEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeEq(actionType uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("action_type = ?", actionType)) +} + +// ActionTypeGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeGt(actionType uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("action_type > ?", actionType)) +} + +// ActionTypeGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeGte(actionType uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("action_type >= ?", actionType)) +} + +// ActionTypeIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeIn(actionType ...uint32) UserActionLogQuerySet { + if len(actionType) == 0 { + qs.db.AddError(errors.New("must at least pass one actionType in ActionTypeIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("action_type IN (?)", actionType)) +} + +// ActionTypeLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeLt(actionType uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("action_type < ?", actionType)) +} + +// ActionTypeLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeLte(actionType uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("action_type <= ?", actionType)) +} + +// ActionTypeNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeNe(actionType uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("action_type != ?", actionType)) +} + +// ActionTypeNotIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) ActionTypeNotIn(actionType ...uint32) UserActionLogQuerySet { + if len(actionType) == 0 { + qs.db.AddError(errors.New("must at least pass one actionType in ActionTypeNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("action_type NOT IN (?)", actionType)) +} + +// All is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) All(ret *[]UserActionLog) error { + return qs.db.Find(ret).Error +} + +// Count is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) Count() (int, error) { + var count int + err := qs.db.Count(&count).Error + return count, err +} + +// CreatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) CreatedAtEq(createdAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("created_at = ?", createdAt)) +} + +// CreatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) CreatedAtGt(createdAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("created_at > ?", createdAt)) +} + +// CreatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) CreatedAtGte(createdAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("created_at >= ?", createdAt)) +} + +// CreatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) CreatedAtLt(createdAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("created_at < ?", createdAt)) +} + +// CreatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) CreatedAtLte(createdAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("created_at <= ?", createdAt)) +} + +// CreatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) CreatedAtNe(createdAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("created_at != ?", createdAt)) +} + +// Delete is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) Delete() error { + return qs.db.Delete(UserActionLog{}).Error +} + +// DeleteNum is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeleteNum() (int64, error) { + db := qs.db.Delete(UserActionLog{}) + return db.RowsAffected, db.Error +} + +// DeleteNumUnscoped is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeleteNumUnscoped() (int64, error) { + db := qs.db.Unscoped().Delete(UserActionLog{}) + return db.RowsAffected, db.Error +} + +// DeletedAtEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtEq(deletedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at = ?", deletedAt)) +} + +// DeletedAtGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtGt(deletedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at > ?", deletedAt)) +} + +// DeletedAtGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtGte(deletedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at >= ?", deletedAt)) +} + +// DeletedAtIsNotNull is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtIsNotNull() UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at IS NOT NULL")) +} + +// DeletedAtIsNull is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtIsNull() UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at IS NULL")) +} + +// DeletedAtLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtLt(deletedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at < ?", deletedAt)) +} + +// DeletedAtLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtLte(deletedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at <= ?", deletedAt)) +} + +// DeletedAtNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) DeletedAtNe(deletedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) +} + +// FirstEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstEq(first uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("first = ?", first)) +} + +// FirstGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstGt(first uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("first > ?", first)) +} + +// FirstGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstGte(first uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("first >= ?", first)) +} + +// FirstIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstIn(first ...uint32) UserActionLogQuerySet { + if len(first) == 0 { + qs.db.AddError(errors.New("must at least pass one first in FirstIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("first IN (?)", first)) +} + +// FirstLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstLt(first uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("first < ?", first)) +} + +// FirstLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstLte(first uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("first <= ?", first)) +} + +// FirstNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstNe(first uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("first != ?", first)) +} + +// FirstNotIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) FirstNotIn(first ...uint32) UserActionLogQuerySet { + if len(first) == 0 { + qs.db.AddError(errors.New("must at least pass one first in FirstNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("first NOT IN (?)", first)) +} + +// GetDB is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) GetDB() *gorm.DB { + return qs.db +} + +// GetUpdater is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) GetUpdater() UserActionLogUpdater { + return NewUserActionLogUpdater(qs.db) +} + +// IDEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDEq(ID uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDGt(ID uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("id > ?", ID)) +} + +// IDGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDGte(ID uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("id >= ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDIn(ID ...uint32) UserActionLogQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDLt(ID uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("id < ?", ID)) +} + +// IDLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDLte(ID uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("id <= ?", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDNe(ID uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) IDNotIn(ID ...uint32) UserActionLogQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + +// Limit is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) Limit(limit int) UserActionLogQuerySet { + return qs.w(qs.db.Limit(limit)) +} + +// Offset is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) Offset(offset int) UserActionLogQuerySet { + return qs.w(qs.db.Offset(offset)) +} + +// One is used to retrieve one result. It returns gorm.ErrRecordNotFound +// if nothing was fetched +func (qs UserActionLogQuerySet) One(ret *UserActionLog) error { + return qs.db.First(ret).Error +} + +// OrderAscByActionType is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByActionType() UserActionLogQuerySet { + return qs.w(qs.db.Order("action_type ASC")) +} + +// OrderAscByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByCreatedAt() UserActionLogQuerySet { + return qs.w(qs.db.Order("created_at ASC")) +} + +// OrderAscByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByDeletedAt() UserActionLogQuerySet { + return qs.w(qs.db.Order("deleted_at ASC")) +} + +// OrderAscByFirst is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByFirst() UserActionLogQuerySet { + return qs.w(qs.db.Order("first ASC")) +} + +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByID() UserActionLogQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + +// OrderAscByUid is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByUid() UserActionLogQuerySet { + return qs.w(qs.db.Order("uid ASC")) +} + +// OrderAscByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderAscByUpdatedAt() UserActionLogQuerySet { + return qs.w(qs.db.Order("updated_at ASC")) +} + +// OrderDescByActionType is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByActionType() UserActionLogQuerySet { + return qs.w(qs.db.Order("action_type DESC")) +} + +// OrderDescByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByCreatedAt() UserActionLogQuerySet { + return qs.w(qs.db.Order("created_at DESC")) +} + +// OrderDescByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByDeletedAt() UserActionLogQuerySet { + return qs.w(qs.db.Order("deleted_at DESC")) +} + +// OrderDescByFirst is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByFirst() UserActionLogQuerySet { + return qs.w(qs.db.Order("first DESC")) +} + +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByID() UserActionLogQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + +// OrderDescByUid is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByUid() UserActionLogQuerySet { + return qs.w(qs.db.Order("uid DESC")) +} + +// OrderDescByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) OrderDescByUpdatedAt() UserActionLogQuerySet { + return qs.w(qs.db.Order("updated_at DESC")) +} + +// UidEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidEq(uid uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("uid = ?", uid)) +} + +// UidGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidGt(uid uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("uid > ?", uid)) +} + +// UidGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidGte(uid uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("uid >= ?", uid)) +} + +// UidIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidIn(uid ...uint32) UserActionLogQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid IN (?)", uid)) +} + +// UidLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidLt(uid uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("uid < ?", uid)) +} + +// UidLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidLte(uid uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("uid <= ?", uid)) +} + +// UidNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidNe(uid uint32) UserActionLogQuerySet { + return qs.w(qs.db.Where("uid != ?", uid)) +} + +// UidNotIn is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UidNotIn(uid ...uint32) UserActionLogQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid NOT IN (?)", uid)) +} + +// UpdatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UpdatedAtEq(updatedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("updated_at = ?", updatedAt)) +} + +// UpdatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UpdatedAtGt(updatedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("updated_at > ?", updatedAt)) +} + +// UpdatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UpdatedAtGte(updatedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("updated_at >= ?", updatedAt)) +} + +// UpdatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UpdatedAtLt(updatedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("updated_at < ?", updatedAt)) +} + +// UpdatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UpdatedAtLte(updatedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("updated_at <= ?", updatedAt)) +} + +// UpdatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserActionLogQuerySet) UpdatedAtNe(updatedAt time.Time) UserActionLogQuerySet { + return qs.w(qs.db.Where("updated_at != ?", updatedAt)) +} + +// SetActionType is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetActionType(actionType uint32) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.ActionType)] = actionType + return u +} + +// SetCreatedAt is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetCreatedAt(createdAt time.Time) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.CreatedAt)] = createdAt + return u +} + +// SetDeletedAt is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetDeletedAt(deletedAt *time.Time) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.DeletedAt)] = deletedAt + return u +} + +// SetFirst is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetFirst(first uint32) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.First)] = first + return u +} + +// SetID is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetID(ID uint32) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.ID)] = ID + return u +} + +// SetUid is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetUid(uid uint32) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.Uid)] = uid + return u +} + +// SetUpdatedAt is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) SetUpdatedAt(updatedAt time.Time) UserActionLogUpdater { + u.fields[string(UserActionLogDBSchema.UpdatedAt)] = updatedAt + return u +} + +// Update is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) Update() error { + return u.db.Updates(u.fields).Error +} + +// UpdateNum is an autogenerated method +// nolint: dupl +func (u UserActionLogUpdater) UpdateNum() (int64, error) { + db := u.db.Updates(u.fields) + return db.RowsAffected, db.Error +} + +// ===== END of query set UserActionLogQuerySet + +// ===== BEGIN of UserActionLog modifiers + +// UserActionLogDBSchemaField describes database schema field. It requires for method 'Update' +type UserActionLogDBSchemaField string + +// String method returns string representation of field. +// nolint: dupl +func (f UserActionLogDBSchemaField) String() string { + return string(f) +} + +// UserActionLogDBSchema stores db field names of UserActionLog +var UserActionLogDBSchema = struct { + ID UserActionLogDBSchemaField + CreatedAt UserActionLogDBSchemaField + UpdatedAt UserActionLogDBSchemaField + DeletedAt UserActionLogDBSchemaField + Uid UserActionLogDBSchemaField + ActionType UserActionLogDBSchemaField + First UserActionLogDBSchemaField +}{ + + ID: UserActionLogDBSchemaField("id"), + CreatedAt: UserActionLogDBSchemaField("created_at"), + UpdatedAt: UserActionLogDBSchemaField("updated_at"), + DeletedAt: UserActionLogDBSchemaField("deleted_at"), + Uid: UserActionLogDBSchemaField("uid"), + ActionType: UserActionLogDBSchemaField("action_type"), + First: UserActionLogDBSchemaField("first"), +} + +// Update updates UserActionLog fields by primary key +// nolint: dupl +func (o *UserActionLog) Update(db *gorm.DB, fields ...UserActionLogDBSchemaField) error { + dbNameToFieldName := map[string]interface{}{ + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "action_type": o.ActionType, + "first": o.First, + } + u := map[string]interface{}{} + for _, f := range fields { + fs := f.String() + u[fs] = dbNameToFieldName[fs] + } + if err := db.Model(o).Updates(u).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return err + } + + return fmt.Errorf("can't update UserActionLog %v fields %v: %s", + o, fields, err) + } + + return nil +} + +// UserActionLogUpdater is an UserActionLog updates manager +type UserActionLogUpdater struct { + fields map[string]interface{} + db *gorm.DB +} + +// NewUserActionLogUpdater creates new UserActionLog updater +// nolint: dupl +func NewUserActionLogUpdater(db *gorm.DB) UserActionLogUpdater { + return UserActionLogUpdater{ + fields: map[string]interface{}{}, + db: db.Model(&UserActionLog{}), + } +} + +// ===== END of UserActionLog modifiers + // ===== BEGIN of query set UserMemberRecordQuerySet // UserMemberRecordQuerySet is an queryset type for UserMemberRecord @@ -663,6 +1929,98 @@ func (qs UserMemberRecordQuerySet) One(ret *UserMemberRecord) error { return qs.db.First(ret).Error } +// OpenMemberLevelEq is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelEq(openMemberLevel uint32) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_level = ?", openMemberLevel)) +} + +// OpenMemberLevelGt is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelGt(openMemberLevel uint32) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_level > ?", openMemberLevel)) +} + +// OpenMemberLevelGte is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelGte(openMemberLevel uint32) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_level >= ?", openMemberLevel)) +} + +// OpenMemberLevelIn is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelIn(openMemberLevel ...uint32) UserMemberRecordQuerySet { + if len(openMemberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one openMemberLevel in OpenMemberLevelIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("open_member_level IN (?)", openMemberLevel)) +} + +// OpenMemberLevelLt is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelLt(openMemberLevel uint32) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_level < ?", openMemberLevel)) +} + +// OpenMemberLevelLte is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelLte(openMemberLevel uint32) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_level <= ?", openMemberLevel)) +} + +// OpenMemberLevelNe is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelNe(openMemberLevel uint32) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_level != ?", openMemberLevel)) +} + +// OpenMemberLevelNotIn is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberLevelNotIn(openMemberLevel ...uint32) UserMemberRecordQuerySet { + if len(openMemberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one openMemberLevel in OpenMemberLevelNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("open_member_level NOT IN (?)", openMemberLevel)) +} + +// OpenMemberTimeEq is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberTimeEq(openMemberTime time.Time) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_time = ?", openMemberTime)) +} + +// OpenMemberTimeGt is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberTimeGt(openMemberTime time.Time) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_time > ?", openMemberTime)) +} + +// OpenMemberTimeGte is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberTimeGte(openMemberTime time.Time) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_time >= ?", openMemberTime)) +} + +// OpenMemberTimeLt is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberTimeLt(openMemberTime time.Time) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_time < ?", openMemberTime)) +} + +// OpenMemberTimeLte is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberTimeLte(openMemberTime time.Time) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_time <= ?", openMemberTime)) +} + +// OpenMemberTimeNe is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OpenMemberTimeNe(openMemberTime time.Time) UserMemberRecordQuerySet { + return qs.w(qs.db.Where("open_member_time != ?", openMemberTime)) +} + // OrderAscByAfterMemberExpire is an autogenerated method // nolint: dupl func (qs UserMemberRecordQuerySet) OrderAscByAfterMemberExpire() UserMemberRecordQuerySet { @@ -729,6 +2087,18 @@ func (qs UserMemberRecordQuerySet) OrderAscByInviteUid() UserMemberRecordQuerySe return qs.w(qs.db.Order("invite_uid ASC")) } +// OrderAscByOpenMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OrderAscByOpenMemberLevel() UserMemberRecordQuerySet { + return qs.w(qs.db.Order("open_member_level ASC")) +} + +// OrderAscByOpenMemberTime is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OrderAscByOpenMemberTime() UserMemberRecordQuerySet { + return qs.w(qs.db.Order("open_member_time ASC")) +} + // OrderAscBySerial is an autogenerated method // nolint: dupl func (qs UserMemberRecordQuerySet) OrderAscBySerial() UserMemberRecordQuerySet { @@ -819,6 +2189,18 @@ func (qs UserMemberRecordQuerySet) OrderDescByInviteUid() UserMemberRecordQueryS return qs.w(qs.db.Order("invite_uid DESC")) } +// OrderDescByOpenMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OrderDescByOpenMemberLevel() UserMemberRecordQuerySet { + return qs.w(qs.db.Order("open_member_level DESC")) +} + +// OrderDescByOpenMemberTime is an autogenerated method +// nolint: dupl +func (qs UserMemberRecordQuerySet) OrderDescByOpenMemberTime() UserMemberRecordQuerySet { + return qs.w(qs.db.Order("open_member_time DESC")) +} + // OrderDescBySerial is an autogenerated method // nolint: dupl func (qs UserMemberRecordQuerySet) OrderDescBySerial() UserMemberRecordQuerySet { @@ -1124,6 +2506,20 @@ func (u UserMemberRecordUpdater) SetInviteUid(inviteUid uint32) UserMemberRecord return u } +// SetOpenMemberLevel is an autogenerated method +// nolint: dupl +func (u UserMemberRecordUpdater) SetOpenMemberLevel(openMemberLevel uint32) UserMemberRecordUpdater { + u.fields[string(UserMemberRecordDBSchema.OpenMemberLevel)] = openMemberLevel + return u +} + +// SetOpenMemberTime is an autogenerated method +// nolint: dupl +func (u UserMemberRecordUpdater) SetOpenMemberTime(openMemberTime time.Time) UserMemberRecordUpdater { + u.fields[string(UserMemberRecordDBSchema.OpenMemberTime)] = openMemberTime + return u +} + // SetSerial is an autogenerated method // nolint: dupl func (u UserMemberRecordUpdater) SetSerial(serial uint32) UserMemberRecordUpdater { @@ -1195,6 +2591,8 @@ var UserMemberRecordDBSchema = struct { CouponId UserMemberRecordDBSchemaField Serial UserMemberRecordDBSchemaField Type UserMemberRecordDBSchemaField + OpenMemberLevel UserMemberRecordDBSchemaField + OpenMemberTime UserMemberRecordDBSchemaField }{ ID: UserMemberRecordDBSchemaField("id"), @@ -1212,6 +2610,8 @@ var UserMemberRecordDBSchema = struct { CouponId: UserMemberRecordDBSchemaField("coupon_id"), Serial: UserMemberRecordDBSchemaField("serial"), Type: UserMemberRecordDBSchemaField("type"), + OpenMemberLevel: UserMemberRecordDBSchemaField("open_member_level"), + OpenMemberTime: UserMemberRecordDBSchemaField("open_member_time"), } // Update updates UserMemberRecord fields by primary key @@ -1233,6 +2633,8 @@ func (o *UserMemberRecord) Update(db *gorm.DB, fields ...UserMemberRecordDBSchem "coupon_id": o.CouponId, "serial": o.Serial, "type": o.Type, + "open_member_level": o.OpenMemberLevel, + "open_member_time": o.OpenMemberTime, } u := map[string]interface{}{} for _, f := range fields { diff --git a/model/autogenerated_user.go b/model/autogenerated_user.go index 9522156..27045df 100644 --- a/model/autogenerated_user.go +++ b/model/autogenerated_user.go @@ -8394,6 +8394,756 @@ func NewUserInviteUpdater(db *gorm.DB) UserInviteUpdater { // ===== END of UserInvite modifiers +// ===== BEGIN of query set UserMemberDurationRecordQuerySet + +// UserMemberDurationRecordQuerySet is an queryset type for UserMemberDurationRecord +type UserMemberDurationRecordQuerySet struct { + db *gorm.DB +} + +// NewUserMemberDurationRecordQuerySet constructs new UserMemberDurationRecordQuerySet +func NewUserMemberDurationRecordQuerySet(db *gorm.DB) UserMemberDurationRecordQuerySet { + return UserMemberDurationRecordQuerySet{ + db: db.Model(&UserMemberDurationRecord{}), + } +} + +func (qs UserMemberDurationRecordQuerySet) w(db *gorm.DB) UserMemberDurationRecordQuerySet { + return NewUserMemberDurationRecordQuerySet(db) +} + +func (qs UserMemberDurationRecordQuerySet) Select(fields ...UserMemberDurationRecordDBSchemaField) UserMemberDurationRecordQuerySet { + names := []string{} + for _, f := range fields { + names = append(names, f.String()) + } + + return qs.w(qs.db.Select(strings.Join(names, ","))) +} + +// Create is an autogenerated method +// nolint: dupl +func (o *UserMemberDurationRecord) Create(db *gorm.DB) error { + return db.Create(o).Error +} + +// Delete is an autogenerated method +// nolint: dupl +func (o *UserMemberDurationRecord) Delete(db *gorm.DB) error { + return db.Delete(o).Error +} + +// All is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) All(ret *[]UserMemberDurationRecord) error { + return qs.db.Find(ret).Error +} + +// Count is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) Count() (int, error) { + var count int + err := qs.db.Count(&count).Error + return count, err +} + +// CreatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) CreatedAtEq(createdAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("created_at = ?", createdAt)) +} + +// CreatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) CreatedAtGt(createdAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("created_at > ?", createdAt)) +} + +// CreatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) CreatedAtGte(createdAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("created_at >= ?", createdAt)) +} + +// CreatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) CreatedAtLt(createdAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("created_at < ?", createdAt)) +} + +// CreatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) CreatedAtLte(createdAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("created_at <= ?", createdAt)) +} + +// CreatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) CreatedAtNe(createdAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("created_at != ?", createdAt)) +} + +// Delete is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) Delete() error { + return qs.db.Delete(UserMemberDurationRecord{}).Error +} + +// DeleteNum is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeleteNum() (int64, error) { + db := qs.db.Delete(UserMemberDurationRecord{}) + return db.RowsAffected, db.Error +} + +// DeleteNumUnscoped is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeleteNumUnscoped() (int64, error) { + db := qs.db.Unscoped().Delete(UserMemberDurationRecord{}) + return db.RowsAffected, db.Error +} + +// DeletedAtEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtEq(deletedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at = ?", deletedAt)) +} + +// DeletedAtGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtGt(deletedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at > ?", deletedAt)) +} + +// DeletedAtGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtGte(deletedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at >= ?", deletedAt)) +} + +// DeletedAtIsNotNull is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtIsNotNull() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at IS NOT NULL")) +} + +// DeletedAtIsNull is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtIsNull() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at IS NULL")) +} + +// DeletedAtLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtLt(deletedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at < ?", deletedAt)) +} + +// DeletedAtLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtLte(deletedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at <= ?", deletedAt)) +} + +// DeletedAtNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DeletedAtNe(deletedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) +} + +// DurationEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationEq(duration uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("duration = ?", duration)) +} + +// DurationGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationGt(duration uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("duration > ?", duration)) +} + +// DurationGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationGte(duration uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("duration >= ?", duration)) +} + +// DurationIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationIn(duration ...uint32) UserMemberDurationRecordQuerySet { + if len(duration) == 0 { + qs.db.AddError(errors.New("must at least pass one duration in DurationIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("duration IN (?)", duration)) +} + +// DurationLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationLt(duration uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("duration < ?", duration)) +} + +// DurationLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationLte(duration uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("duration <= ?", duration)) +} + +// DurationNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationNe(duration uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("duration != ?", duration)) +} + +// DurationNotIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) DurationNotIn(duration ...uint32) UserMemberDurationRecordQuerySet { + if len(duration) == 0 { + qs.db.AddError(errors.New("must at least pass one duration in DurationNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("duration NOT IN (?)", duration)) +} + +// EventTypeEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeEq(eventType uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("event_type = ?", eventType)) +} + +// EventTypeGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeGt(eventType uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("event_type > ?", eventType)) +} + +// EventTypeGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeGte(eventType uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("event_type >= ?", eventType)) +} + +// EventTypeIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeIn(eventType ...uint32) UserMemberDurationRecordQuerySet { + if len(eventType) == 0 { + qs.db.AddError(errors.New("must at least pass one eventType in EventTypeIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("event_type IN (?)", eventType)) +} + +// EventTypeLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeLt(eventType uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("event_type < ?", eventType)) +} + +// EventTypeLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeLte(eventType uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("event_type <= ?", eventType)) +} + +// EventTypeNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeNe(eventType uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("event_type != ?", eventType)) +} + +// EventTypeNotIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) EventTypeNotIn(eventType ...uint32) UserMemberDurationRecordQuerySet { + if len(eventType) == 0 { + qs.db.AddError(errors.New("must at least pass one eventType in EventTypeNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("event_type NOT IN (?)", eventType)) +} + +// GetDB is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) GetDB() *gorm.DB { + return qs.db +} + +// GetUpdater is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) GetUpdater() UserMemberDurationRecordUpdater { + return NewUserMemberDurationRecordUpdater(qs.db) +} + +// IDEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDEq(ID uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDGt(ID uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("id > ?", ID)) +} + +// IDGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDGte(ID uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("id >= ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDIn(ID ...uint32) UserMemberDurationRecordQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDLt(ID uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("id < ?", ID)) +} + +// IDLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDLte(ID uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("id <= ?", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDNe(ID uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) IDNotIn(ID ...uint32) UserMemberDurationRecordQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + +// Limit is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) Limit(limit int) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Limit(limit)) +} + +// MemberLevelEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelEq(memberLevel uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("member_level = ?", memberLevel)) +} + +// MemberLevelGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelGt(memberLevel uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("member_level > ?", memberLevel)) +} + +// MemberLevelGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelGte(memberLevel uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("member_level >= ?", memberLevel)) +} + +// MemberLevelIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelIn(memberLevel ...uint32) UserMemberDurationRecordQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level IN (?)", memberLevel)) +} + +// MemberLevelLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelLt(memberLevel uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("member_level < ?", memberLevel)) +} + +// MemberLevelLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelLte(memberLevel uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("member_level <= ?", memberLevel)) +} + +// MemberLevelNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelNe(memberLevel uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("member_level != ?", memberLevel)) +} + +// MemberLevelNotIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) MemberLevelNotIn(memberLevel ...uint32) UserMemberDurationRecordQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level NOT IN (?)", memberLevel)) +} + +// Offset is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) Offset(offset int) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Offset(offset)) +} + +// One is used to retrieve one result. It returns gorm.ErrRecordNotFound +// if nothing was fetched +func (qs UserMemberDurationRecordQuerySet) One(ret *UserMemberDurationRecord) error { + return qs.db.First(ret).Error +} + +// OrderAscByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByCreatedAt() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("created_at ASC")) +} + +// OrderAscByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByDeletedAt() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("deleted_at ASC")) +} + +// OrderAscByDuration is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByDuration() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("duration ASC")) +} + +// OrderAscByEventType is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByEventType() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("event_type ASC")) +} + +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByID() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + +// OrderAscByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByMemberLevel() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("member_level ASC")) +} + +// OrderAscByUid is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByUid() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("uid ASC")) +} + +// OrderAscByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderAscByUpdatedAt() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("updated_at ASC")) +} + +// OrderDescByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByCreatedAt() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("created_at DESC")) +} + +// OrderDescByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByDeletedAt() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("deleted_at DESC")) +} + +// OrderDescByDuration is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByDuration() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("duration DESC")) +} + +// OrderDescByEventType is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByEventType() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("event_type DESC")) +} + +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByID() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + +// OrderDescByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByMemberLevel() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("member_level DESC")) +} + +// OrderDescByUid is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByUid() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("uid DESC")) +} + +// OrderDescByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) OrderDescByUpdatedAt() UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Order("updated_at DESC")) +} + +// UidEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidEq(uid uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("uid = ?", uid)) +} + +// UidGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidGt(uid uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("uid > ?", uid)) +} + +// UidGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidGte(uid uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("uid >= ?", uid)) +} + +// UidIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidIn(uid ...uint32) UserMemberDurationRecordQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid IN (?)", uid)) +} + +// UidLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidLt(uid uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("uid < ?", uid)) +} + +// UidLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidLte(uid uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("uid <= ?", uid)) +} + +// UidNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidNe(uid uint32) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("uid != ?", uid)) +} + +// UidNotIn is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UidNotIn(uid ...uint32) UserMemberDurationRecordQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid NOT IN (?)", uid)) +} + +// UpdatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UpdatedAtEq(updatedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("updated_at = ?", updatedAt)) +} + +// UpdatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UpdatedAtGt(updatedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("updated_at > ?", updatedAt)) +} + +// UpdatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UpdatedAtGte(updatedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("updated_at >= ?", updatedAt)) +} + +// UpdatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UpdatedAtLt(updatedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("updated_at < ?", updatedAt)) +} + +// UpdatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UpdatedAtLte(updatedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("updated_at <= ?", updatedAt)) +} + +// UpdatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserMemberDurationRecordQuerySet) UpdatedAtNe(updatedAt time.Time) UserMemberDurationRecordQuerySet { + return qs.w(qs.db.Where("updated_at != ?", updatedAt)) +} + +// SetCreatedAt is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetCreatedAt(createdAt time.Time) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.CreatedAt)] = createdAt + return u +} + +// SetDeletedAt is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetDeletedAt(deletedAt *time.Time) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.DeletedAt)] = deletedAt + return u +} + +// SetDuration is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetDuration(duration uint32) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.Duration)] = duration + return u +} + +// SetEventType is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetEventType(eventType uint32) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.EventType)] = eventType + return u +} + +// SetID is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetID(ID uint32) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.ID)] = ID + return u +} + +// SetMemberLevel is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetMemberLevel(memberLevel uint32) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.MemberLevel)] = memberLevel + return u +} + +// SetUid is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetUid(uid uint32) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.Uid)] = uid + return u +} + +// SetUpdatedAt is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) SetUpdatedAt(updatedAt time.Time) UserMemberDurationRecordUpdater { + u.fields[string(UserMemberDurationRecordDBSchema.UpdatedAt)] = updatedAt + return u +} + +// Update is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) Update() error { + return u.db.Updates(u.fields).Error +} + +// UpdateNum is an autogenerated method +// nolint: dupl +func (u UserMemberDurationRecordUpdater) UpdateNum() (int64, error) { + db := u.db.Updates(u.fields) + return db.RowsAffected, db.Error +} + +// ===== END of query set UserMemberDurationRecordQuerySet + +// ===== BEGIN of UserMemberDurationRecord modifiers + +// UserMemberDurationRecordDBSchemaField describes database schema field. It requires for method 'Update' +type UserMemberDurationRecordDBSchemaField string + +// String method returns string representation of field. +// nolint: dupl +func (f UserMemberDurationRecordDBSchemaField) String() string { + return string(f) +} + +// UserMemberDurationRecordDBSchema stores db field names of UserMemberDurationRecord +var UserMemberDurationRecordDBSchema = struct { + ID UserMemberDurationRecordDBSchemaField + CreatedAt UserMemberDurationRecordDBSchemaField + UpdatedAt UserMemberDurationRecordDBSchemaField + DeletedAt UserMemberDurationRecordDBSchemaField + Uid UserMemberDurationRecordDBSchemaField + Duration UserMemberDurationRecordDBSchemaField + EventType UserMemberDurationRecordDBSchemaField + MemberLevel UserMemberDurationRecordDBSchemaField +}{ + + ID: UserMemberDurationRecordDBSchemaField("id"), + CreatedAt: UserMemberDurationRecordDBSchemaField("created_at"), + UpdatedAt: UserMemberDurationRecordDBSchemaField("updated_at"), + DeletedAt: UserMemberDurationRecordDBSchemaField("deleted_at"), + Uid: UserMemberDurationRecordDBSchemaField("uid"), + Duration: UserMemberDurationRecordDBSchemaField("duration"), + EventType: UserMemberDurationRecordDBSchemaField("event_type"), + MemberLevel: UserMemberDurationRecordDBSchemaField("member_level"), +} + +// Update updates UserMemberDurationRecord fields by primary key +// nolint: dupl +func (o *UserMemberDurationRecord) Update(db *gorm.DB, fields ...UserMemberDurationRecordDBSchemaField) error { + dbNameToFieldName := map[string]interface{}{ + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "duration": o.Duration, + "event_type": o.EventType, + "member_level": o.MemberLevel, + } + u := map[string]interface{}{} + for _, f := range fields { + fs := f.String() + u[fs] = dbNameToFieldName[fs] + } + if err := db.Model(o).Updates(u).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return err + } + + return fmt.Errorf("can't update UserMemberDurationRecord %v fields %v: %s", + o, fields, err) + } + + return nil +} + +// UserMemberDurationRecordUpdater is an UserMemberDurationRecord updates manager +type UserMemberDurationRecordUpdater struct { + fields map[string]interface{} + db *gorm.DB +} + +// NewUserMemberDurationRecordUpdater creates new UserMemberDurationRecord updater +// nolint: dupl +func NewUserMemberDurationRecordUpdater(db *gorm.DB) UserMemberDurationRecordUpdater { + return UserMemberDurationRecordUpdater{ + fields: map[string]interface{}{}, + db: db.Model(&UserMemberDurationRecord{}), + } +} + +// ===== END of UserMemberDurationRecord modifiers + // ===== BEGIN of query set UserMemberExpireDelayQuerySet // UserMemberExpireDelayQuerySet is an queryset type for UserMemberExpireDelay diff --git a/model/config.go b/model/config.go index 6e36578..d42b296 100644 --- a/model/config.go +++ b/model/config.go @@ -27,12 +27,13 @@ type PayConfig struct { } const ( - ConfigNamePay = "pay_config" // 支付配置 - ConfigNameMember = "member_config" // 会员配置 - ConfigNameMemberVm = "member_vm_config" // 会员积分配置 - ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置 - ConfigActivityRenewal = "activity_renewal_config" // 活动配置 - ConfigRecycleCard = "recycle_card_config" // 回收卡配置 + ConfigNamePay = "pay_config" // 支付配置 + ConfigNameMember = "member_config" // 会员配置 + ConfigNameMemberVm = "member_vm_config" // 会员积分配置 + ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置 + ConfigActivityRenewal = "activity_renewal_config" // 活动配置 + ConfigRecycleCard = "recycle_card_config" // 回收卡配置 + ConfigPostagePackageFee = "postage_package_fee_config" // 运费包费 ) func PayConfigInfo() (*PayConfig, error) { @@ -243,6 +244,40 @@ func RecycleCardConfigInfo() (RecycleCardConfig, error) { return recycleConfig, nil } +type PostagePackageFeeConfig struct { + PostagePackageFee uint32 `json:"postage_package_fee"` +} + +func PostagePackageFeeConfigInfo() (PostagePackageFeeConfig, error) { + postagePackageFeeConfig := PostagePackageFeeConfig{} + var configAllocation Config + err := NewConfigQuerySet(DB).NameEq(ConfigPostagePackageFee).One(&configAllocation) + if err != nil { + logger.Error("err:", err) + return postagePackageFeeConfig, err + } + + err = json.Unmarshal([]byte(configAllocation.Value), &postagePackageFeeConfig) + if err != nil { + logger.Error("err:", err) + return postagePackageFeeConfig, err + } + + return postagePackageFeeConfig, nil +} + +func GetPostagePackageMemberDuration(level uint32) uint32 { + switch level { + case 2: + return 90 + case 4: + return 51 + case 5: + return 24 + } + return 0 +} + //type ConfigInterface interface { // Encode() string //} diff --git a/model/coupon.go b/model/coupon.go index 7c1c5e1..8149e22 100644 --- a/model/coupon.go +++ b/model/coupon.go @@ -25,7 +25,7 @@ type Coupon struct { Name string `json:"name"` Describe string `json:"describe" gorm:"type:text;"` // 描述 CouponType string `json:"coupon_type"` - ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号 + ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号 3-运费包 ActivityId uint32 `json:"activity_id" gorm:"index"` Value uint32 `json:"value"` OutCount uint32 `json:"out_count"` // 用户已领取数量 @@ -43,7 +43,7 @@ type UserCoupon struct { Uid uint32 `json:"uid" gorm:"index"` CouponId uint32 `json:"coupon_id" gorm:"index"` CouponType string `json:"coupon_type"` - ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 + ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号 3-运费包 ActivityId uint32 `json:"activity_id" gorm:"index"` Value uint32 `json:"value"` State uint32 `json:"state"` // 1-未使用 2-已使用 3-已过期 @@ -59,7 +59,7 @@ type Activity struct { Model Name string `json:"name" gorm:"column:name;comment:'活动名称'"` // 活动名称 - ActivityType uint32 `json:"activity_type" gorm:"column:activity_type;comment:'活动类型'"` // 活动类型 1-会员续费 2-关注公众号 + ActivityType uint32 `json:"activity_type" gorm:"column:activity_type;comment:'活动类型'"` // 活动类型 1-会员续费 2-关注公众号 3-运费包 State uint32 `json:"state" gorm:"column:state;comment:'状态'"` // 1-未开启 2-进行中 3-已结束 StartTime time.Time `json:"start_time" gorm:"column:start_time;comment:'开始时间'"` // 开始时间 EndTime time.Time `json:"end_time" gorm:"column:end_time;comment:'结束时间'"` // 结束时间 零值永不结束 diff --git a/model/game_card.go b/model/game_card.go index ebd3771..3142b03 100644 --- a/model/game_card.go +++ b/model/game_card.go @@ -560,11 +560,14 @@ func GetGameCardSearch(name string, page, pageSize int, storeId uint32) ([]GameC cardMap[cards[i].ID] = cards[i] } var cardStocks []GameCardGoodsStock - err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(cardIds...).RentStockGt(0).All(&cardStocks) - if err != nil { - logger.Error("game card goods stock err:", err) - return cards, totalPage, nil + if len(cardIds) != 0 { + err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(cardIds...).RentStockGt(0).All(&cardStocks) + if err != nil { + logger.Error("game card goods stock err:", err) + return cards, totalPage, nil + } } + list := make([]GameCard, 0, len(cards)) stockMap := make(map[uint64]uint32, 0) for i, _ := range cardStocks { @@ -1064,7 +1067,7 @@ func (m *GameCardGoodsStockAnalysisReq) GameCardStockListAnalysis() (*GameCardGo } //fmt.Println("--gameIds:", gameIds) - sqlStore += fmt.Sprintf(" AND game_card_id IN (%s)", strings.Join(gameIds, ",")) + sqlStore += fmt.Sprintf(" AND game_card_id IN (%s) ", strings.Join(gameIds, ",")) } //var countGame int64 @@ -1072,6 +1075,7 @@ func (m *GameCardGoodsStockAnalysisReq) GameCardStockListAnalysis() (*GameCardGo fmt.Println("sqlCount:", sqlCount) err := DB.Raw(sqlCount).Scan(&gameCardCount).Error if err != nil { + logger.Info("sqlCount:", sqlCount) logger.Error("sqlCount err:", err) return resp, err } diff --git a/model/model_test.go b/model/model_test.go index 883215c..ec2b04e 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -1,11 +1,14 @@ package model import ( + "bytes" "crypto/sha512" + "encoding/hex" "encoding/json" "fmt" "mh-server/lib/auth" "mh-server/lib/utils" + "mh-server/lib/xianmai" "os" "sort" "strconv" @@ -91,12 +94,10 @@ func InitTestDB() { //&User{}, //&Order{}, //&OrderCard{}, - // //&OperationLog{}, //&CooperativeBusiness{}, //&CooperativeMemberDeduct{}, //&CooperativeAssistantMemberDeduct{}, - // //&CooperativeMemberPromotion{}, //&CooperativeMemberPromotionStore{}, //&CooperativeMemberPromotionDay{}, @@ -138,14 +139,19 @@ func InitTestDB() { //&CooperativeMemberPromotion{}, //&GameCard{}, //&CooperativeMemberPromotionStoreDay{}, - // //&UserInvite{}, //&UserInviteRecord{}, //&CooperativeMemberPromotionStore{}, - &RecycleCardOrder{}, - &RedeemCode{}, - &PublicRecord{}, + //&RecycleCardOrder{}, + //&RedeemCode{}, + //&PublicRecord{}, + + &Order{}, + &OrderCard{}, + &UserMemberDurationRecord{}, + &Statistic{}, + &UserActionLog{}, ) fmt.Println("DB init success") @@ -181,9 +187,15 @@ func InitDBProd() { DBProd.LogMode(false) DBProd.SingularTable(true) DBProd.AutoMigrate( - &RecycleCardOrder{}, - &RedeemCode{}, - &PublicRecord{}, + //&RecycleCardOrder{}, + //&RedeemCode{}, + //&PublicRecord{}, + + &Order{}, + &OrderCard{}, + &UserMemberDurationRecord{}, + &Statistic{}, + &UserActionLog{}, ) if err := DBProd.DB().Ping(); err != nil { @@ -1099,7 +1111,8 @@ func TestAtt(t *testing.T) { } func UserAttendanceDays() { - uc := &auth.UserClaims{Uid: 31871993} + //uc := &auth.UserClaims{Uid: 31871993} + uc := &auth.UserClaims{} list := make([]AttendanceInfo, 0, 7) todayZero := utils.TodayZeroDateFormat() configInfo, err := AttendanceVmConfigInfo() @@ -1660,3 +1673,52 @@ func TestExportGameList(t *testing.T) { } } + +func TestReader(t *testing.T) { + buffer := bytes.Buffer{} + buffer.ReadByte() + l1 := []uint32{1, 2, 3} + l2 := make([]uint32, 10) + l3 := make([]uint32, 1) + l4 := make([]uint32, 0) + copy(l2, l1) + copy(l3, l1) + copy(l4, l1) + fmt.Println("l2:", l2) + fmt.Println("l3:", l3) + fmt.Println("l4:", l4) +} + +func TestRandSecret(t *testing.T) { + RandSecret("seed") +} + +func RandSecret(seed string) { + key := fmt.Sprintf("%s%d", seed, time.Now().UnixNano()) + hash := sha512.New() + hash.Write([]byte(key)) + encodeToString := hex.EncodeToString(hash.Sum(nil)) + fmt.Println("encode:", encodeToString[:10]) + + //return strconv.ParseUint(encodeToString[:5], 16, 32) +} + +func TestGameCassetteList(t *testing.T) { + list, count, err := xianmai.GameCassetteList("", 0, 10000) + if err != nil { + fmt.Println("err:", err) + } + fmt.Println("count:", count) + + for i, _ := range list { + fmt.Println("", list[i].GoodsName) + + } + +} + +func TestDays(t *testing.T) { + d1, _ := time.Parse(DateTimeFormat, "2022-12-27") + d2, _ := time.Parse(DateTimeFormat, "2022-09-28") + fmt.Println("天数:", (d2.Unix()-d1.Unix())/24/3600) +} diff --git a/model/order.go b/model/order.go index 7180f1c..88a2db0 100644 --- a/model/order.go +++ b/model/order.go @@ -52,6 +52,7 @@ type Order struct { OrderSn string `json:"order_sn" gorm:"type:varchar(255);not null;COMMENT:'订单编号'"` // 订单编号 PayPrice uint32 `json:"pay_price"` // 实际付款金额(包含运费) Postage uint32 `json:"postage"` // 邮费 + PostageType uint32 `json:"postage_type"` // 邮费类型:1-法币 2-包邮券 ExpressCompany string `json:"express_company"` // 物流公司 ExpressCompanyNo string `json:"express_company_no"` // 物流公司编号 ExpressNo string `json:"express_no"` // 物流单号 @@ -99,6 +100,7 @@ type OrderCard struct { CooperativeName string `json:"cooperative_name"` // 合作商名称 Postage uint32 `json:"postage" gorm:"-"` // 邮费 + PostageType uint32 `json:"postage_type"` // 邮费类型 ExpressCompany string `json:"express_company" gorm:"-"` // 物流公司 ExpressCompanyNo string `json:"express_company_no" gorm:"-"` // 物流公司编号 ExpressNo string `json:"express_no" gorm:"-"` // 物流单号 diff --git a/model/store.go b/model/store.go index 84f7baa..77ebd1c 100644 --- a/model/store.go +++ b/model/store.go @@ -261,3 +261,31 @@ func CannibalizeGameCardGoodsSetInfo(goodses []CannibalizeGameCardGoods) []Canni //UserOpenMemberRecord{} return goodses } + +//func GetDeliveryStoreByAddress(addressId uint32) Store { +// // 订单最少的店 +// // 没有库存 +// // 订单最多的店 +// store := Store{} +// var address UserAddress +// err := NewUserAddressQuerySet(DB).IDEq(addressId).One(&address) +// if err != nil { +// logger.Error("user address err:", err) +// return store +// } +// +// var stores []Store +// err = NewStoreQuerySet(DB).ProvinceEq(address.Province).All(&stores) +// if err != nil { +// logger.Error("store err:", err) +// return store +// } +// +// storeIds := make([]uint32, 0, len(stores)) +// for i, _ := range stores { +// storeIds = append(storeIds, stores[i].ID) +// } +// +// NewGameCardGoodsStockQuerySet(DB).IDIn(storeIds...) +// +//} diff --git a/model/user.go b/model/user.go index cb01e0d..9de1886 100644 --- a/model/user.go +++ b/model/user.go @@ -147,6 +147,7 @@ const ( FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单 FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货 FundTypeRecycleCard = "recycle_card" // 回收卡带 + FundTypePostagePackageFee = "postage_package_fee" // 购买运费包 ) // gen:qs @@ -256,7 +257,7 @@ func UserUpdate(user *User) error { return nil } -//OrderType: 1-物流支付 2-取消物流租卡 3-滞纳金 4-收回卡 5-退物流费 6-商城购物 7-购买商品取消订单 8-购买商品订单退货 9-升级会员 10-开通 续费 +//OrderType: 1-物流支付 2-取消物流租卡 3-滞纳金 4-收回卡 5-退物流费 6-商城购物 7-购买商品取消订单 8-购买商品订单退货 9-升级会员 10-开通 续费 11-运费包 // gen:qs type UserOpenMemberRecord struct { @@ -322,6 +323,16 @@ type OperationLog struct { Remark string `json:"remark"` // 备注 } +// gen:qs +type UserMemberDurationRecord struct { + Model + + Uid uint32 `json:"uid"` + Duration uint32 `json:"duration"` + EventType uint32 `json:"event_type"` // 类型: 1-购买运费包 + MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员 +} + func (m *UserOpenMemberRecord) OrderRefund(outTradeNo string) error { if m.Order == nil { return errors.New("order is nil") diff --git a/router/router_app.go b/router/router_app.go index c6b415c..ec862bf 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -131,7 +131,7 @@ func ConfigAppRouter(r gin.IRouter) { // 订单 order := api.Group("order") { - order.POST("amount", controller.OrderAmount) // 订单金额 + order.POST("info", controller.OrderInfo) // 订单详情 order.POST("express", controller.OrderExpress) // 订单物流 order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表 @@ -145,6 +145,7 @@ func ConfigAppRouter(r gin.IRouter) { order.POST("revert/cancel", controller.OrderRevertCancel) // 取消归还 //order.POST("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款 order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货 + order.POST("amount", controller.OrderAmount) // 订单金额 } article := api.Group("article") @@ -170,6 +171,9 @@ func ConfigAppRouter(r gin.IRouter) { activity.POST("member_renewal/info", controller.UserMemberRenewalInfo) activity.POST("member_renewal/coupon_draw", controller.UserMemberRenewalCouponDraw) activity.POST("member_renewal/user_coupon/list", controller.MemberRenewalUserCouponList) + activity.POST("postage_package/buy", controller.PostagePackageBuy) + activity.POST("user_coupon/list", controller.UserCouponList) + activity.POST("postage_package/info", controller.PostagePackageInfo) } mall := api.Group("mall") @@ -274,5 +278,4 @@ func ConfigAppRouter(r gin.IRouter) { recycleConsole.POST("order/check", controller.RecycleCardOrderCheck) // 管理端 recycleConsole.POST("order/list", controller.ConsoleRecycleCardOrderList) } - }