This commit is contained in:
li 2022-01-27 22:24:29 +08:00
parent 0a4c7f2c4b
commit 75b20230c6
9 changed files with 546 additions and 207 deletions

View File

@ -252,11 +252,13 @@ func PushWXPayNotice(c *gin.Context) {
if notify.Attach == wxpay.WxPayRentCard {
logger.Info("租借游戏卡 支付成功:")
var order model.Order
err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).One(&order)
err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).PayStatusEq(PayStatusUnPay).One(&order)
if err != nil {
logger.Error("err:", err)
return
}
//orderJson, _ := json.Marshal(&order)
//fmt.Println("orderJson:", string(orderJson))
begin := model.DB.Begin()
err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater().
@ -287,13 +289,13 @@ func PushWXPayNotice(c *gin.Context) {
return
}
count, err := model.NewOrderQuerySet(begin).IDEq(order.ID).Count()
if err != nil {
logger.Error("err:", err)
return
}
//count, err := model.NewOrderQuerySet(model.DB).UidEq(order.Uid).IDEq(order.ID).Count()
//if err != nil {
// logger.Error("err:", err)
// return
//}
go model.OrderCardUserRentCard(uint32(order.Uid), uint32(count), nil)
//go model.OrderCardUserRentCard(uint32(order.Uid), uint32(count), nil)
} else if notify.Attach == wxpay.WxPayMember {
logger.Info("开通会员 支付成功:")
@ -334,10 +336,16 @@ func PushWXPayNotice(c *gin.Context) {
logger.Error("GetMemberConfig err:", err)
return
}
err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit})
openMemberTime := time.Now()
if !user.OpenMemberTime.IsZero() {
openMemberTime = user.OpenMemberTime
}
_, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).SetMemberExpire(expireTime).
SetDeposit(memberConfig.MemberDeposit).SetOpenMemberTime(openMemberTime).UpdateNum()
//err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit})
if err != nil {
logger.Error("err:", err)
return
}
var invite model.UserInvite
@ -418,7 +426,7 @@ func PushWXPayNotice(c *gin.Context) {
memberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil {
logger.Error("err:",err)
logger.Error("err:", err)
return
}
@ -429,6 +437,48 @@ func PushWXPayNotice(c *gin.Context) {
if num == 0 {
logger.Error("update deposit num is 0")
}
} else if notify.Attach == wxpay.WxPayUpgradeMember {
record := &model.UserOpenMemberRecord{OpenNo: notify.OutTradeNo}
err := record.GetByOpenNo()
if err != nil {
logger.Error("err:", err)
}
fmt.Println("UpgradeMember:", record.Uid)
var user model.User
err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user)
if err != nil {
logger.Error("err:", err)
return
}
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
if err != nil {
logger.Error("GetMemberConfig err:", err)
return
}
_, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).SetMemberExpire(record.MemberExpire).
SetDeposit(memberConfig.MemberDeposit).UpdateNum()
//err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit})
if err != nil {
logger.Error("err:", err)
return
}
// 添加会员时长 等级 借卡数量
var userRentCard model.UserRentCard
err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).One(&userRentCard)
if err != nil {
logger.Error("err:", err)
return
}
_, err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
SetLevelRentCount(memberConfig.CardMax).SetCanRentCount(memberConfig.CardMax - userRentCard.HaveRentCount).UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
}
logger.Debug("微信推动支付通知")

View File

@ -71,7 +71,6 @@ func RentCardOrderList(c *gin.Context) {
}
req.Uid = uc.Uid
orderCardList, totalPage, err := req.GetOrderCardList() // TODO
if err != nil {
logger.Error("err:", err)
@ -90,9 +89,10 @@ func RentCardOrderList(c *gin.Context) {
func OrderInfo(c *gin.Context) {
req := struct {
OrderId uint32 `json:"order_id"`
GameCardId uint64 `json:"game_card_id"` // 游戏id
GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id
//OrderId uint32 `json:"order_id"`
//GameCardId uint64 `json:"game_card_id"` // 游戏id
//GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id
OrderCardId uint32 `json:"order_card_id"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err")
@ -100,9 +100,9 @@ func OrderInfo(c *gin.Context) {
return
}
order := model.Order{}
order.ID = req.OrderId
order.GameCardId = req.GameCardId
info, err := order.Info()
//order.ID = req.OrderId
//order.GameCardId = req.GameCardId
info, err := order.Info(req.OrderCardId)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
@ -324,7 +324,7 @@ func RentCardOrderCreate(c *gin.Context) {
stockEnough, err := model.IsCardGoodsStockEnough(req.GameCardList, req.StoreId)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
RespJson(c, status.OrderStockOut, nil)
return
}
if stockEnough {
@ -376,7 +376,7 @@ func RentCardOrderCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig)
go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig, nil)
ret := map[string]interface{}{
"web_pay": "",
"order_id": order.ID,
@ -869,12 +869,6 @@ func OrderCancel(c *gin.Context) {
fmt.Println("order:", order)
if isRecede {
err = model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID)
if err != nil {
@ -901,8 +895,8 @@ func OrderCancel(c *gin.Context) {
Currency: "CNY",
},
}
//bytes, _ := json.Marshal(orderRefund)
//fmt.Println("订单取消:", string(bytes))
bytes, _ := json.Marshal(order)
fmt.Println("订单取消:", string(bytes))
//err = wxpay.WxPayOrderRefund(orderRefund)
err = wxpay.TransactionOrderRefund(orderRefund)
if err != nil {

View File

@ -298,32 +298,73 @@ func UpgradeMember(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//totalFee := uint32(MemberFee + DepositFee)
////totalFee = uint32(3) // TODO 测试
//if user.Deposit == 300 {
// totalFee = MemberFee
// // //totalFee = uint32(1) // TODO 测试
//}
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit)
totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit
if user.Deposit == memberConfig.MemberDeposit {
totalFee = memberConfig.MemberFee
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00")
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberFee := originalMemberConfig.MemberFee
if user.OpenMemberTime.Before(raiseTime) {
memberFee = 29900
}
// 补押金
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).StatusEq(model.RedeemCodeStatusUsed).Count()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
fmt.Println("count:", count)
// 抵扣天数
deductionDays := int64(0)
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 12*3600
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
// 补会员费
memberMendFee := int64(memberConfig.MemberFee) - deductionFee
totalFee := int64(depositMendFee) + memberMendFee
//if memberMendFee < 0 {
// depositMendFee = depositMendFee + memberMendFee
//}
fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee)
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
//totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit
//if user.Deposit == memberConfig.MemberDeposit {
// totalFee = memberConfig.MemberFee
//}
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
@ -336,15 +377,17 @@ func UpgradeMember(c *gin.Context) {
// return
//}
//orderSn := utils.GetSerialNo32HEXString()
memberExpire := time.Now().AddDate(1, 0, count*30)
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel}.Insert()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,
MemberLevel: req.MemberLevel, OrderType: 3, MemberExpire: memberExpire}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayMember)
webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
@ -354,6 +397,105 @@ func UpgradeMember(c *gin.Context) {
RespOK(c, webPay)
}
func UpgradeMemberInfo(c *gin.Context) {
req := struct {
MemberLevel uint32 `json:"member_level"` // 昵称
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := model.GetUserByUid(uc.Uid)
if user.MemberLevel != 2 && user.MemberLevel != 4 {
logger.Error("MemberLevel err:")
RespJson(c, status.InternalServerError, nil)
return
}
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00")
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberFee := originalMemberConfig.MemberFee
if user.OpenMemberTime.Before(raiseTime) {
memberFee = 29900
}
// 补押金
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).StatusEq(model.RedeemCodeStatusUsed).Count()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
fmt.Println("count:", count)
// 抵扣天数
deductionDays := int64(0)
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 12*3600
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
// 补会员费
memberMendFee := int64(memberConfig.MemberFee) - deductionFee
totalFee := int64(depositMendFee) + memberMendFee
//if memberMendFee < 0 {
// depositMendFee = depositMendFee + memberMendFee
//}
fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee)
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, map[string]interface{}{
"deduction_fee": deductionFee, // 会员抵扣费
"deduction_days": deductionDays, // 会员抵扣天数
"member_mend_fee": memberMendFee, // 会员补费
"deposit_mend_fee": depositMendFee, // 补押金
"total_fee": totalFee, // 总费用
})
}
func PayDeposit(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {

View File

@ -37,6 +37,7 @@ const (
WxPayMember = "member_pay" // 会员
WxPayRentCard = "rent_card_pay" // 租卡
WxPayDeposit = "deposit_pay" // 押金
WxPayUpgradeMember = "upgrade_member" // 押金
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产
//NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" // TODO 测试

View File

@ -3439,6 +3439,42 @@ func (qs UserOpenMemberRecordQuerySet) Limit(limit int) UserOpenMemberRecordQuer
return qs.w(qs.db.Limit(limit))
}
// MemberExpireEq is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberExpireEq(memberExpire time.Time) UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Where("member_expire = ?", memberExpire))
}
// MemberExpireGt is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberExpireGt(memberExpire time.Time) UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Where("member_expire > ?", memberExpire))
}
// MemberExpireGte is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberExpireGte(memberExpire time.Time) UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Where("member_expire >= ?", memberExpire))
}
// MemberExpireLt is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberExpireLt(memberExpire time.Time) UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Where("member_expire < ?", memberExpire))
}
// MemberExpireLte is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberExpireLte(memberExpire time.Time) UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Where("member_expire <= ?", memberExpire))
}
// MemberExpireNe is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberExpireNe(memberExpire time.Time) UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Where("member_expire != ?", memberExpire))
}
// MemberLevelEq is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberLevelEq(memberLevel uint32) UserOpenMemberRecordQuerySet {
@ -3557,6 +3593,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderAscByID() UserOpenMemberRecordQueryS
return qs.w(qs.db.Order("id ASC"))
}
// OrderAscByMemberExpire is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberExpire() UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Order("member_expire ASC"))
}
// OrderAscByMemberLevel is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberLevel() UserOpenMemberRecordQuerySet {
@ -3605,6 +3647,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderDescByID() UserOpenMemberRecordQuery
return qs.w(qs.db.Order("id DESC"))
}
// OrderDescByMemberExpire is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberExpire() UserOpenMemberRecordQuerySet {
return qs.w(qs.db.Order("member_expire DESC"))
}
// OrderDescByMemberLevel is an autogenerated method
// nolint: dupl
func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberLevel() UserOpenMemberRecordQuerySet {
@ -3860,6 +3908,13 @@ func (u UserOpenMemberRecordUpdater) SetID(ID uint32) UserOpenMemberRecordUpdate
return u
}
// SetMemberExpire is an autogenerated method
// nolint: dupl
func (u UserOpenMemberRecordUpdater) SetMemberExpire(memberExpire time.Time) UserOpenMemberRecordUpdater {
u.fields[string(UserOpenMemberRecordDBSchema.MemberExpire)] = memberExpire
return u
}
// SetMemberLevel is an autogenerated method
// nolint: dupl
func (u UserOpenMemberRecordUpdater) SetMemberLevel(memberLevel uint32) UserOpenMemberRecordUpdater {
@ -3930,41 +3985,44 @@ func (f UserOpenMemberRecordDBSchemaField) String() string {
// UserOpenMemberRecordDBSchema stores db field names of UserOpenMemberRecord
var UserOpenMemberRecordDBSchema = struct {
ID UserOpenMemberRecordDBSchemaField
CreatedAt UserOpenMemberRecordDBSchemaField
UpdatedAt UserOpenMemberRecordDBSchemaField
DeletedAt UserOpenMemberRecordDBSchemaField
Uid UserOpenMemberRecordDBSchemaField
OpenNo UserOpenMemberRecordDBSchemaField
OrderId UserOpenMemberRecordDBSchemaField
OrderType UserOpenMemberRecordDBSchemaField
MemberLevel UserOpenMemberRecordDBSchemaField
ID UserOpenMemberRecordDBSchemaField
CreatedAt UserOpenMemberRecordDBSchemaField
UpdatedAt UserOpenMemberRecordDBSchemaField
DeletedAt UserOpenMemberRecordDBSchemaField
Uid UserOpenMemberRecordDBSchemaField
OpenNo UserOpenMemberRecordDBSchemaField
OrderId UserOpenMemberRecordDBSchemaField
OrderType UserOpenMemberRecordDBSchemaField
MemberLevel UserOpenMemberRecordDBSchemaField
MemberExpire UserOpenMemberRecordDBSchemaField
}{
ID: UserOpenMemberRecordDBSchemaField("id"),
CreatedAt: UserOpenMemberRecordDBSchemaField("created_at"),
UpdatedAt: UserOpenMemberRecordDBSchemaField("updated_at"),
DeletedAt: UserOpenMemberRecordDBSchemaField("deleted_at"),
Uid: UserOpenMemberRecordDBSchemaField("uid"),
OpenNo: UserOpenMemberRecordDBSchemaField("open_no"),
OrderId: UserOpenMemberRecordDBSchemaField("order_id"),
OrderType: UserOpenMemberRecordDBSchemaField("order_type"),
MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"),
ID: UserOpenMemberRecordDBSchemaField("id"),
CreatedAt: UserOpenMemberRecordDBSchemaField("created_at"),
UpdatedAt: UserOpenMemberRecordDBSchemaField("updated_at"),
DeletedAt: UserOpenMemberRecordDBSchemaField("deleted_at"),
Uid: UserOpenMemberRecordDBSchemaField("uid"),
OpenNo: UserOpenMemberRecordDBSchemaField("open_no"),
OrderId: UserOpenMemberRecordDBSchemaField("order_id"),
OrderType: UserOpenMemberRecordDBSchemaField("order_type"),
MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"),
MemberExpire: UserOpenMemberRecordDBSchemaField("member_expire"),
}
// Update updates UserOpenMemberRecord fields by primary key
// nolint: dupl
func (o *UserOpenMemberRecord) Update(db *gorm.DB, fields ...UserOpenMemberRecordDBSchemaField) error {
dbNameToFieldName := map[string]interface{}{
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"uid": o.Uid,
"open_no": o.OpenNo,
"order_id": o.OrderId,
"order_type": o.OrderType,
"member_level": o.MemberLevel,
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"uid": o.Uid,
"open_no": o.OpenNo,
"order_id": o.OrderId,
"order_type": o.OrderType,
"member_level": o.MemberLevel,
"member_expire": o.MemberExpire,
}
u := map[string]interface{}{}
for _, f := range fields {
@ -4722,6 +4780,42 @@ func (qs UserQuerySet) One(ret *User) error {
return qs.db.First(ret).Error
}
// OpenMemberTimeEq is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OpenMemberTimeEq(openMemberTime time.Time) UserQuerySet {
return qs.w(qs.db.Where("open_member_time = ?", openMemberTime))
}
// OpenMemberTimeGt is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OpenMemberTimeGt(openMemberTime time.Time) UserQuerySet {
return qs.w(qs.db.Where("open_member_time > ?", openMemberTime))
}
// OpenMemberTimeGte is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OpenMemberTimeGte(openMemberTime time.Time) UserQuerySet {
return qs.w(qs.db.Where("open_member_time >= ?", openMemberTime))
}
// OpenMemberTimeLt is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OpenMemberTimeLt(openMemberTime time.Time) UserQuerySet {
return qs.w(qs.db.Where("open_member_time < ?", openMemberTime))
}
// OpenMemberTimeLte is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OpenMemberTimeLte(openMemberTime time.Time) UserQuerySet {
return qs.w(qs.db.Where("open_member_time <= ?", openMemberTime))
}
// OpenMemberTimeNe is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OpenMemberTimeNe(openMemberTime time.Time) UserQuerySet {
return qs.w(qs.db.Where("open_member_time != ?", openMemberTime))
}
// OrderAscByBond is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OrderAscByBond() UserQuerySet {
@ -4776,6 +4870,12 @@ func (qs UserQuerySet) OrderAscByMemberLevel() UserQuerySet {
return qs.w(qs.db.Order("member_level ASC"))
}
// OrderAscByOpenMemberTime is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OrderAscByOpenMemberTime() UserQuerySet {
return qs.w(qs.db.Order("open_member_time ASC"))
}
// OrderAscByStoreId is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OrderAscByStoreId() UserQuerySet {
@ -4866,6 +4966,12 @@ func (qs UserQuerySet) OrderDescByMemberLevel() UserQuerySet {
return qs.w(qs.db.Order("member_level DESC"))
}
// OrderDescByOpenMemberTime is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OrderDescByOpenMemberTime() UserQuerySet {
return qs.w(qs.db.Order("open_member_time DESC"))
}
// OrderDescByStoreId is an autogenerated method
// nolint: dupl
func (qs UserQuerySet) OrderDescByStoreId() UserQuerySet {
@ -5515,6 +5621,13 @@ func (u UserUpdater) SetMemberLevel(memberLevel uint32) UserUpdater {
return u
}
// SetOpenMemberTime is an autogenerated method
// nolint: dupl
func (u UserUpdater) SetOpenMemberTime(openMemberTime time.Time) UserUpdater {
u.fields[string(UserDBSchema.OpenMemberTime)] = openMemberTime
return u
}
// SetProvince is an autogenerated method
// nolint: dupl
func (u UserUpdater) SetProvince(province string) UserUpdater {
@ -5627,95 +5740,98 @@ func (f UserDBSchemaField) String() string {
// UserDBSchema stores db field names of User
var UserDBSchema = struct {
ID UserDBSchemaField
CreatedAt UserDBSchemaField
UpdatedAt UserDBSchemaField
DeletedAt UserDBSchemaField
Uid UserDBSchemaField
MemberLevel UserDBSchemaField
MemberExpire UserDBSchemaField
Bond UserDBSchemaField
WxName UserDBSchemaField
WxAvatar UserDBSchemaField
WxOpenID UserDBSchemaField
AppOpenID UserDBSchemaField
WxUnionID UserDBSchemaField
Tel UserDBSchemaField
Gender UserDBSchemaField
City UserDBSchemaField
Province UserDBSchemaField
Country UserDBSchemaField
Deposit UserDBSchemaField
UserType UserDBSchemaField
StoreId UserDBSchemaField
InviteCodeUrl UserDBSchemaField
LastLoginAt UserDBSchemaField
IP UserDBSchemaField
InBlack UserDBSchemaField
StoreType UserDBSchemaField
Version UserDBSchemaField
ID UserDBSchemaField
CreatedAt UserDBSchemaField
UpdatedAt UserDBSchemaField
DeletedAt UserDBSchemaField
Uid UserDBSchemaField
MemberLevel UserDBSchemaField
MemberExpire UserDBSchemaField
OpenMemberTime UserDBSchemaField
Bond UserDBSchemaField
WxName UserDBSchemaField
WxAvatar UserDBSchemaField
WxOpenID UserDBSchemaField
AppOpenID UserDBSchemaField
WxUnionID UserDBSchemaField
Tel UserDBSchemaField
Gender UserDBSchemaField
City UserDBSchemaField
Province UserDBSchemaField
Country UserDBSchemaField
Deposit UserDBSchemaField
UserType UserDBSchemaField
StoreId UserDBSchemaField
InviteCodeUrl UserDBSchemaField
LastLoginAt UserDBSchemaField
IP UserDBSchemaField
InBlack UserDBSchemaField
StoreType UserDBSchemaField
Version UserDBSchemaField
}{
ID: UserDBSchemaField("id"),
CreatedAt: UserDBSchemaField("created_at"),
UpdatedAt: UserDBSchemaField("updated_at"),
DeletedAt: UserDBSchemaField("deleted_at"),
Uid: UserDBSchemaField("uid"),
MemberLevel: UserDBSchemaField("member_level"),
MemberExpire: UserDBSchemaField("member_expire"),
Bond: UserDBSchemaField("bond"),
WxName: UserDBSchemaField("wx_name"),
WxAvatar: UserDBSchemaField("wx_avatar"),
WxOpenID: UserDBSchemaField("wx_open_id"),
AppOpenID: UserDBSchemaField("app_open_id"),
WxUnionID: UserDBSchemaField("wx_union_id"),
Tel: UserDBSchemaField("tel"),
Gender: UserDBSchemaField("gender"),
City: UserDBSchemaField("city"),
Province: UserDBSchemaField("province"),
Country: UserDBSchemaField("country"),
Deposit: UserDBSchemaField("deposit"),
UserType: UserDBSchemaField("user_type"),
StoreId: UserDBSchemaField("store_id"),
InviteCodeUrl: UserDBSchemaField("invite_code_url"),
LastLoginAt: UserDBSchemaField("last_login_at"),
IP: UserDBSchemaField("ip"),
InBlack: UserDBSchemaField("in_black"),
StoreType: UserDBSchemaField("store_type"),
Version: UserDBSchemaField("version"),
ID: UserDBSchemaField("id"),
CreatedAt: UserDBSchemaField("created_at"),
UpdatedAt: UserDBSchemaField("updated_at"),
DeletedAt: UserDBSchemaField("deleted_at"),
Uid: UserDBSchemaField("uid"),
MemberLevel: UserDBSchemaField("member_level"),
MemberExpire: UserDBSchemaField("member_expire"),
OpenMemberTime: UserDBSchemaField("open_member_time"),
Bond: UserDBSchemaField("bond"),
WxName: UserDBSchemaField("wx_name"),
WxAvatar: UserDBSchemaField("wx_avatar"),
WxOpenID: UserDBSchemaField("wx_open_id"),
AppOpenID: UserDBSchemaField("app_open_id"),
WxUnionID: UserDBSchemaField("wx_union_id"),
Tel: UserDBSchemaField("tel"),
Gender: UserDBSchemaField("gender"),
City: UserDBSchemaField("city"),
Province: UserDBSchemaField("province"),
Country: UserDBSchemaField("country"),
Deposit: UserDBSchemaField("deposit"),
UserType: UserDBSchemaField("user_type"),
StoreId: UserDBSchemaField("store_id"),
InviteCodeUrl: UserDBSchemaField("invite_code_url"),
LastLoginAt: UserDBSchemaField("last_login_at"),
IP: UserDBSchemaField("ip"),
InBlack: UserDBSchemaField("in_black"),
StoreType: UserDBSchemaField("store_type"),
Version: UserDBSchemaField("version"),
}
// Update updates User fields by primary key
// nolint: dupl
func (o *User) Update(db *gorm.DB, fields ...UserDBSchemaField) error {
dbNameToFieldName := map[string]interface{}{
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"uid": o.Uid,
"member_level": o.MemberLevel,
"member_expire": o.MemberExpire,
"bond": o.Bond,
"wx_name": o.WxName,
"wx_avatar": o.WxAvatar,
"wx_open_id": o.WxOpenID,
"app_open_id": o.AppOpenID,
"wx_union_id": o.WxUnionID,
"tel": o.Tel,
"gender": o.Gender,
"city": o.City,
"province": o.Province,
"country": o.Country,
"deposit": o.Deposit,
"user_type": o.UserType,
"store_id": o.StoreId,
"invite_code_url": o.InviteCodeUrl,
"last_login_at": o.LastLoginAt,
"ip": o.IP,
"in_black": o.InBlack,
"store_type": o.StoreType,
"version": o.Version,
"id": o.ID,
"created_at": o.CreatedAt,
"updated_at": o.UpdatedAt,
"deleted_at": o.DeletedAt,
"uid": o.Uid,
"member_level": o.MemberLevel,
"member_expire": o.MemberExpire,
"open_member_time": o.OpenMemberTime,
"bond": o.Bond,
"wx_name": o.WxName,
"wx_avatar": o.WxAvatar,
"wx_open_id": o.WxOpenID,
"app_open_id": o.AppOpenID,
"wx_union_id": o.WxUnionID,
"tel": o.Tel,
"gender": o.Gender,
"city": o.City,
"province": o.Province,
"country": o.Country,
"deposit": o.Deposit,
"user_type": o.UserType,
"store_id": o.StoreId,
"invite_code_url": o.InviteCodeUrl,
"last_login_at": o.LastLoginAt,
"ip": o.IP,
"in_black": o.InBlack,
"store_type": o.StoreType,
"version": o.Version,
}
u := map[string]interface{}{}
for _, f := range fields {

View File

@ -71,7 +71,7 @@ type OrderCard struct {
GameCardId uint32 `json:"game_card_id" gorm:"index"` // 游戏id
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"` // 游戏卡id
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
CardStatus uint32 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消
CardStatus uint32 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消
DeliveryTime time.Time `json:"delivery_time"` // 发货时间
ReceiptTime time.Time `json:"receipt_time"` // 收货时间
DeliveryType uint8 `json:"delivery_type"` // 取货类型 1-门店自取 2-快递
@ -233,13 +233,12 @@ func (m *OrderListReq) GetOrderCardList() ([]OrderCard, uint32, error) {
}
totalPage = uint32(count/m.PageSize + 1)
orderCards = OrderCardListSetGameInfo(orderCards)
return orderCards, totalPage, nil
}
func (m *Order) Info() ([]OrderCard, error) {
func (m *Order) Info(orderCardId uint32) ([]OrderCard, error) {
//err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
//if err != nil {
@ -253,10 +252,11 @@ func (m *Order) Info() ([]OrderCard, error) {
// return nil, err
//}
qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId))
if m.GameCardGoodsId != 0 {
qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId))
}
qs := NewOrderCardQuerySet(DB).IDEq(orderCardId)
//qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId))
//if m.GameCardGoodsId != 0 {
// qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId))
//}
var orderCards []OrderCard
err := qs.All(&orderCards)
if err != nil {
@ -285,8 +285,8 @@ func (m *Order) Revert() error {
// logger.Error("order card status completed")
// return errors.New("order card status completed")
//}
fmt.Println("GameCardGoodsId------:",m.GameCardGoodsId)
fmt.Println("ID------:",m.ID)
fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId)
fmt.Println("ID------:", m.ID)
err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
if err != nil {
logger.Errorf("err:%#v", err)
@ -467,7 +467,7 @@ func (m *UserRentCard) IsHaveUnreturnedOrders(RentCount uint32) (bool, error) {
}
func IsHaveOnDeliverOrderCards(orderId uint32) (bool, error) {
count, err := NewOrderCardQuerySet(DB).OrderIdEq(orderId).CardStatusEq(1).Count()
count, err := NewOrderCardQuerySet(DB).OrderIdEq(orderId).CardStatusEq(OrderCardStatusUnPick).Count()
if err != nil {
logger.Error("err:", err)
return false, err
@ -540,6 +540,8 @@ func (m *Order) Cancel() (bool, error) {
logger.Error("err:", err)
return false, err
}
orderJson, _ := json.Marshal(m)
fmt.Println("orderJson:", string(orderJson))
//err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard)
@ -592,19 +594,36 @@ func (m *Order) Cancel() (bool, error) {
logger.Errorf("err:%#v", err)
return false, err
}
//UserRentCard{}
sqlRent := fmt.Sprintf("UPDATE user_rent_card SET have_rent_count = have_rent_count-1,can_rent_count=can_rent_count+1 WHERE uid =%d;", order.Uid)
fmt.Println("sqlRent:", sqlRent)
err = begin.Exec(sqlRent).Error
if err != nil {
begin.Rollback()
logger.Errorf("err:%#v", err)
return false, err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Errorf("err:%#v", err)
return false, err
}
isRecede := false
if order.DeliveryType == 2 && order.Postage > 0 {
isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID)
isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID)
if err != nil {
logger.Error("err:", err)
return false, err
}
if !isHaveOnDeliver {
err = NewOrderQuerySet(DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
if err != nil {
logger.Error("err:", err)
return false, err
}
}
isRecede := false
if order.DeliveryType == 2 && order.Postage > 0 {
if !isHaveOnDeliver {
isRecede = true
}
@ -681,10 +700,14 @@ func IsCardGoodsStockEnough(cards []CardInfo, storeId uint32) (bool, error) {
var gameCardGoodsStock GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(cards[i].GameCardId)).
One(&gameCardGoodsStock)
if err != nil {
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return false, err
}
if err == RecordNotFound {
logger.Error("order stock out:")
return false, err
}
if gameCardGoodsStock.RentStock < cards[i].Count {
logger.Error("order stock out ")
return false, errors.New("order stock out")
@ -708,13 +731,15 @@ func GameCardGoodsInventoryReduction(cards []CardInfo, storeId uint32, gdb *gorm
func (m *Order) InventoryReduction(gdb *gorm.DB) error {
var cards []OrderCard
err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).All(&cards)
err := NewOrderCardQuerySet(DB).UidEq(uint32(m.Uid)).OrderIdEq(m.ID).All(&cards)
if err != nil {
logger.Error("err:", err)
return err
}
//fmt.Println("cards:", cards)
for i, _ := range cards {
//fmt.Println("cards:", cards[i].GameCardId, cards[i].StoreId, cards[i].Uid)
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", m.StoreId, cards[i].GameCardId)
fmt.Println("sql:", sql)
err := gdb.Exec(sql).Error
@ -723,6 +748,10 @@ func (m *Order) InventoryReduction(gdb *gorm.DB) error {
return err
}
}
err = OrderCardUserRentCard(uint32(m.Uid), uint32(len(cards)), nil, gdb)
if err != nil {
logger.Error("err:", err)
}
return nil
}

View File

@ -167,7 +167,7 @@ func UserRedeemCodeConvert(uid uint32, serialCode string) error {
return nil
}
func CodeSendToUser(uid uint32, codeType string,activityType uint32) error {
func CodeSendToUser(uid uint32, codeType string, activityType uint32) error {
count, err := NewUserRedeemCodeQuerySet(DB).UidEq(uid).Count()
if err != nil {
logger.Error("err:", err)
@ -198,7 +198,7 @@ func CodeSendToUser(uid uint32, codeType string,activityType uint32) error {
Status: UserRedeemCodeStatusHold,
SerialCode: redeemCode.SerialCode,
CodeType: redeemCode.CodeType,
ActivityType: activityType ,
ActivityType: activityType,
//ActivityType: RedeemCodeActivityTypeUserInvite,
}
err = begin.Create(userRedeemCode).Error

View File

@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/jinzhu/gorm"
"mh-server/lib/utils"
"sync"
"time"
@ -14,29 +15,30 @@ import (
type User struct {
Model
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
Bond uint32 `json:"bond"` // 保证金
WxName string `json:"wx_name"` // 昵称
WxAvatar string `json:"wx_avatar"` // 头像
WxOpenID string `json:"wx_open_id"`
AppOpenID string `json:"app_open_id"`
WxUnionID string `json:"wx_union_id"`
Tel string `json:"tel"` // 电话
Gender uint8 `json:"gender"` // 性别
City string `json:"city"` // 城市
Province string `json:"province"` // 省
Country string `json:"country"` // 市
Deposit uint32 `json:"deposit"` //
UserType uint8 `json:"user_type"` // 用户类型 1-普通用户 2-店员
StoreId uint64 `json:"store_id"` // 门店id
InviteCodeUrl string `json:"invite_code_url"` // 分享二维码
LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间
IP string `json:"-" gorm:"type:varchar(60)"` // ip
InBlack bool `json:"in_black"` // 是否在黑名单
StoreType uint8 `json:"store_type"` // 1-订单门店
Version uint32 `json:"-"`
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
OpenMemberTime time.Time `json:"open_member_time"` // 开通会员
Bond uint32 `json:"bond"` // 保证金
WxName string `json:"wx_name"` // 昵称
WxAvatar string `json:"wx_avatar"` // 头像
WxOpenID string `json:"wx_open_id"`
AppOpenID string `json:"app_open_id"`
WxUnionID string `json:"wx_union_id"`
Tel string `json:"tel"` // 电话
Gender uint8 `json:"gender"` // 性别
City string `json:"city"` // 城市
Province string `json:"province"` // 省
Country string `json:"country"` // 市
Deposit uint32 `json:"deposit"` //
UserType uint8 `json:"user_type"` // 用户类型 1-普通用户 2-店员
StoreId uint64 `json:"store_id"` // 门店id
InviteCodeUrl string `json:"invite_code_url"` // 分享二维码
LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间
IP string `json:"-" gorm:"type:varchar(60)"` // ip
InBlack bool `json:"in_black"` // 是否在黑名单
StoreType uint8 `json:"store_type"` // 1-订单门店
Version uint32 `json:"-"`
}
func (o *User) TableName() string {
@ -180,11 +182,12 @@ func UserUpdate(user *User) error {
type UserOpenMemberRecord struct {
Model
Uid uint32 `json:"uid"`
OpenNo string `json:"open_no" gorm:"index"`
OrderId uint32 `json:"order_id"`
OrderType uint32 `json:"order_type"` // 1-物流支付
MemberLevel uint32 `json:"member_level"`
Uid uint32 `json:"uid"`
OpenNo string `json:"open_no" gorm:"index"`
OrderId uint32 `json:"order_id"`
OrderType uint32 `json:"order_type"` // 1-物流支付 2-取消物流租卡
MemberLevel uint32 `json:"member_level"`
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
}
func (o *UserOpenMemberRecord) TableName() string {
@ -439,8 +442,11 @@ func GetUserMutex(mutexKey string) *sync.Mutex {
var AuthLoginMutex = sync.Mutex{}
func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig) error {
func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig,gdb *gorm.DB) error {
//UserRentCard{}
if gdb == nil {
gdb = DB
}
var userRentCard UserRentCard
err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard)
if err != nil && err != RecordNotFound {
@ -468,7 +474,7 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig)
CanRentCount: uint32(memberConfig.CardMax - count),
Status: 0,
}
err := DB.Create(rentCard).Error
err := gdb.Create(rentCard).Error
if err != nil {
logger.Error("err", err)
return err
@ -476,7 +482,7 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig)
return nil
}
sql := fmt.Sprintf("UPDATE user_rent_card SET have_rent_count=have_rent_count+%d ,can_rent_count=can_rent_count-%d WHERE uid = %d", count, count, uid)
err = DB.Exec(sql).Error
err = gdb.Exec(sql).Error
if err != nil {
logger.Error("err", err)
return err

View File

@ -75,7 +75,8 @@ func ConfigAppRouter(r gin.IRouter) {
user.POST("user_info/tel", controller.UserTel) // 获取用户手机号
user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息
user.POST("open_member", controller.OpenMember) // 开通会员
user.POST("upgrade_member", controller.UpgradeMember) // 开通会员
user.POST("upgrade_member", controller.UpgradeMember) // 升级会员
user.POST("upgrade_member_info", controller.UpgradeMemberInfo) // 升级详情
user.POST("pay_deposit", controller.PayDeposit) // 支付押金
user.POST("refund_deposit", controller.RefundDeposit) // 退押金
user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录
@ -126,14 +127,14 @@ func ConfigAppRouter(r gin.IRouter) {
order.POST("express", controller.OrderExpress) // 订单物流
order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表
order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功
order.POST("cancel", controller.OrderCancel) // 订单取消
order.POST("cancel", controller.OrderCancel) // 取消租卡
order.Use(auth.UserAccessAuth) // TODO
order.POST("create", controller.RentCardOrderCreate) // 创建租卡
order.POST("pay", controller.OrderPay) // 租卡订单支付
order.POST("list", controller.RentCardOrderList) // 租卡订单列表
order.POST("revert", controller.OrderRevert) // 租卡订单归还
order.POST("revert/cancel", controller.OrderRevertCancel) // 租卡订单取消归还
order.POST("revert/cancel", controller.OrderRevertCancel) // 取消归还
//order.POST("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款
order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货