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 { if notify.Attach == wxpay.WxPayRentCard {
logger.Info("租借游戏卡 支付成功:") logger.Info("租借游戏卡 支付成功:")
var order model.Order 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 { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return return
} }
//orderJson, _ := json.Marshal(&order)
//fmt.Println("orderJson:", string(orderJson))
begin := model.DB.Begin() begin := model.DB.Begin()
err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater(). err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater().
@ -287,13 +289,13 @@ func PushWXPayNotice(c *gin.Context) {
return return
} }
count, err := model.NewOrderQuerySet(begin).IDEq(order.ID).Count() //count, err := model.NewOrderQuerySet(model.DB).UidEq(order.Uid).IDEq(order.ID).Count()
if err != nil { //if err != nil {
logger.Error("err:", err) // logger.Error("err:", err)
return // 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 { } else if notify.Attach == wxpay.WxPayMember {
logger.Info("开通会员 支付成功:") logger.Info("开通会员 支付成功:")
@ -334,10 +336,16 @@ func PushWXPayNotice(c *gin.Context) {
logger.Error("GetMemberConfig err:", err) logger.Error("GetMemberConfig err:", err)
return return
} }
openMemberTime := time.Now()
err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit}) 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 { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return
} }
var invite model.UserInvite var invite model.UserInvite
@ -418,7 +426,7 @@ func PushWXPayNotice(c *gin.Context) {
memberConfig, err := model.GetMemberConfig(user.MemberLevel) memberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil { if err != nil {
logger.Error("err:",err) logger.Error("err:", err)
return return
} }
@ -429,6 +437,48 @@ func PushWXPayNotice(c *gin.Context) {
if num == 0 { if num == 0 {
logger.Error("update deposit num is 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("微信推动支付通知") logger.Debug("微信推动支付通知")

View File

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

View File

@ -298,32 +298,73 @@ func UpgradeMember(c *gin.Context) {
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
//configInfo, err := model.PayConfigInfo()
//if err != nil { originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
//totalFee := uint32(MemberFee + DepositFee) memberConfig, err := model.GetMemberConfig(req.MemberLevel)
////totalFee = uint32(3) // TODO 测试 if err != nil {
//if user.Deposit == 300 { logger.Error("err:", err)
// totalFee = MemberFee RespJson(c, status.InternalServerError, nil)
// // //totalFee = uint32(1) // TODO 测试 return
//}
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit)
totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit
if user.Deposit == memberConfig.MemberDeposit {
totalFee = memberConfig.MemberFee
} }
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 { if totalFee == 0 {
logger.Error(errors.New("totalFee is 0")) logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
@ -336,15 +377,17 @@ func UpgradeMember(c *gin.Context) {
// return // return
//} //}
//orderSn := utils.GetSerialNo32HEXString() //orderSn := utils.GetSerialNo32HEXString()
memberExpire := time.Now().AddDate(1, 0, count*30)
orderSn := model.GetOrderSn() 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 { if err != nil {
logger.Error(errors.New("WebPay err")) logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return 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 { if err != nil {
logger.Error(errors.New("WebPay err")) logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
@ -354,6 +397,105 @@ func UpgradeMember(c *gin.Context) {
RespOK(c, webPay) 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) { func PayDeposit(c *gin.Context) {
uc := auth.GetCurrentUser(c) uc := auth.GetCurrentUser(c)
if uc == nil { if uc == nil {

View File

@ -37,6 +37,7 @@ const (
WxPayMember = "member_pay" // 会员 WxPayMember = "member_pay" // 会员
WxPayRentCard = "rent_card_pay" // 租卡 WxPayRentCard = "rent_card_pay" // 租卡
WxPayDeposit = "deposit_pay" // 押金 WxPayDeposit = "deposit_pay" // 押金
WxPayUpgradeMember = "upgrade_member" // 押金
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产 //NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产
//NotifyUrl = "https://dev.switch.deovo.com:8004/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)) 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 // MemberLevelEq is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserOpenMemberRecordQuerySet) MemberLevelEq(memberLevel uint32) UserOpenMemberRecordQuerySet { func (qs UserOpenMemberRecordQuerySet) MemberLevelEq(memberLevel uint32) UserOpenMemberRecordQuerySet {
@ -3557,6 +3593,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderAscByID() UserOpenMemberRecordQueryS
return qs.w(qs.db.Order("id ASC")) 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 // OrderAscByMemberLevel is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberLevel() UserOpenMemberRecordQuerySet { func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberLevel() UserOpenMemberRecordQuerySet {
@ -3605,6 +3647,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderDescByID() UserOpenMemberRecordQuery
return qs.w(qs.db.Order("id DESC")) 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 // OrderDescByMemberLevel is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberLevel() UserOpenMemberRecordQuerySet { func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberLevel() UserOpenMemberRecordQuerySet {
@ -3860,6 +3908,13 @@ func (u UserOpenMemberRecordUpdater) SetID(ID uint32) UserOpenMemberRecordUpdate
return u 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 // SetMemberLevel is an autogenerated method
// nolint: dupl // nolint: dupl
func (u UserOpenMemberRecordUpdater) SetMemberLevel(memberLevel uint32) UserOpenMemberRecordUpdater { func (u UserOpenMemberRecordUpdater) SetMemberLevel(memberLevel uint32) UserOpenMemberRecordUpdater {
@ -3939,6 +3994,7 @@ var UserOpenMemberRecordDBSchema = struct {
OrderId UserOpenMemberRecordDBSchemaField OrderId UserOpenMemberRecordDBSchemaField
OrderType UserOpenMemberRecordDBSchemaField OrderType UserOpenMemberRecordDBSchemaField
MemberLevel UserOpenMemberRecordDBSchemaField MemberLevel UserOpenMemberRecordDBSchemaField
MemberExpire UserOpenMemberRecordDBSchemaField
}{ }{
ID: UserOpenMemberRecordDBSchemaField("id"), ID: UserOpenMemberRecordDBSchemaField("id"),
@ -3950,6 +4006,7 @@ var UserOpenMemberRecordDBSchema = struct {
OrderId: UserOpenMemberRecordDBSchemaField("order_id"), OrderId: UserOpenMemberRecordDBSchemaField("order_id"),
OrderType: UserOpenMemberRecordDBSchemaField("order_type"), OrderType: UserOpenMemberRecordDBSchemaField("order_type"),
MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"), MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"),
MemberExpire: UserOpenMemberRecordDBSchemaField("member_expire"),
} }
// Update updates UserOpenMemberRecord fields by primary key // Update updates UserOpenMemberRecord fields by primary key
@ -3965,6 +4022,7 @@ func (o *UserOpenMemberRecord) Update(db *gorm.DB, fields ...UserOpenMemberRecor
"order_id": o.OrderId, "order_id": o.OrderId,
"order_type": o.OrderType, "order_type": o.OrderType,
"member_level": o.MemberLevel, "member_level": o.MemberLevel,
"member_expire": o.MemberExpire,
} }
u := map[string]interface{}{} u := map[string]interface{}{}
for _, f := range fields { for _, f := range fields {
@ -4722,6 +4780,42 @@ func (qs UserQuerySet) One(ret *User) error {
return qs.db.First(ret).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 // OrderAscByBond is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserQuerySet) OrderAscByBond() UserQuerySet { func (qs UserQuerySet) OrderAscByBond() UserQuerySet {
@ -4776,6 +4870,12 @@ func (qs UserQuerySet) OrderAscByMemberLevel() UserQuerySet {
return qs.w(qs.db.Order("member_level ASC")) 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 // OrderAscByStoreId is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserQuerySet) OrderAscByStoreId() UserQuerySet { func (qs UserQuerySet) OrderAscByStoreId() UserQuerySet {
@ -4866,6 +4966,12 @@ func (qs UserQuerySet) OrderDescByMemberLevel() UserQuerySet {
return qs.w(qs.db.Order("member_level DESC")) 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 // OrderDescByStoreId is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs UserQuerySet) OrderDescByStoreId() UserQuerySet { func (qs UserQuerySet) OrderDescByStoreId() UserQuerySet {
@ -5515,6 +5621,13 @@ func (u UserUpdater) SetMemberLevel(memberLevel uint32) UserUpdater {
return u 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 // SetProvince is an autogenerated method
// nolint: dupl // nolint: dupl
func (u UserUpdater) SetProvince(province string) UserUpdater { func (u UserUpdater) SetProvince(province string) UserUpdater {
@ -5634,6 +5747,7 @@ var UserDBSchema = struct {
Uid UserDBSchemaField Uid UserDBSchemaField
MemberLevel UserDBSchemaField MemberLevel UserDBSchemaField
MemberExpire UserDBSchemaField MemberExpire UserDBSchemaField
OpenMemberTime UserDBSchemaField
Bond UserDBSchemaField Bond UserDBSchemaField
WxName UserDBSchemaField WxName UserDBSchemaField
WxAvatar UserDBSchemaField WxAvatar UserDBSchemaField
@ -5663,6 +5777,7 @@ var UserDBSchema = struct {
Uid: UserDBSchemaField("uid"), Uid: UserDBSchemaField("uid"),
MemberLevel: UserDBSchemaField("member_level"), MemberLevel: UserDBSchemaField("member_level"),
MemberExpire: UserDBSchemaField("member_expire"), MemberExpire: UserDBSchemaField("member_expire"),
OpenMemberTime: UserDBSchemaField("open_member_time"),
Bond: UserDBSchemaField("bond"), Bond: UserDBSchemaField("bond"),
WxName: UserDBSchemaField("wx_name"), WxName: UserDBSchemaField("wx_name"),
WxAvatar: UserDBSchemaField("wx_avatar"), WxAvatar: UserDBSchemaField("wx_avatar"),
@ -5696,6 +5811,7 @@ func (o *User) Update(db *gorm.DB, fields ...UserDBSchemaField) error {
"uid": o.Uid, "uid": o.Uid,
"member_level": o.MemberLevel, "member_level": o.MemberLevel,
"member_expire": o.MemberExpire, "member_expire": o.MemberExpire,
"open_member_time": o.OpenMemberTime,
"bond": o.Bond, "bond": o.Bond,
"wx_name": o.WxName, "wx_name": o.WxName,
"wx_avatar": o.WxAvatar, "wx_avatar": o.WxAvatar,

View File

@ -233,13 +233,12 @@ func (m *OrderListReq) GetOrderCardList() ([]OrderCard, uint32, error) {
} }
totalPage = uint32(count/m.PageSize + 1) totalPage = uint32(count/m.PageSize + 1)
orderCards = OrderCardListSetGameInfo(orderCards) orderCards = OrderCardListSetGameInfo(orderCards)
return orderCards, totalPage, nil 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) //err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
//if err != nil { //if err != nil {
@ -253,10 +252,11 @@ func (m *Order) Info() ([]OrderCard, error) {
// return nil, err // return nil, err
//} //}
qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)) qs := NewOrderCardQuerySet(DB).IDEq(orderCardId)
if m.GameCardGoodsId != 0 { //qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId))
qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId)) //if m.GameCardGoodsId != 0 {
} // qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId))
//}
var orderCards []OrderCard var orderCards []OrderCard
err := qs.All(&orderCards) err := qs.All(&orderCards)
if err != nil { if err != nil {
@ -285,8 +285,8 @@ func (m *Order) Revert() error {
// logger.Error("order card status completed") // logger.Error("order card status completed")
// return errors.New("order card status completed") // return errors.New("order card status completed")
//} //}
fmt.Println("GameCardGoodsId------:",m.GameCardGoodsId) fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId)
fmt.Println("ID------:",m.ID) fmt.Println("ID------:", m.ID)
err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
if err != nil { if err != nil {
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
@ -467,7 +467,7 @@ func (m *UserRentCard) IsHaveUnreturnedOrders(RentCount uint32) (bool, error) {
} }
func IsHaveOnDeliverOrderCards(orderId 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 { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return false, err return false, err
@ -540,6 +540,8 @@ func (m *Order) Cancel() (bool, error) {
logger.Error("err:", err) logger.Error("err:", err)
return false, 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).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).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) logger.Errorf("err:%#v", err)
return false, 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 err = begin.Commit().Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return false, 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 { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return false, 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 { if !isHaveOnDeliver {
isRecede = true isRecede = true
} }
@ -681,10 +700,14 @@ func IsCardGoodsStockEnough(cards []CardInfo, storeId uint32) (bool, error) {
var gameCardGoodsStock GameCardGoodsStock var gameCardGoodsStock GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(cards[i].GameCardId)). err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(cards[i].GameCardId)).
One(&gameCardGoodsStock) One(&gameCardGoodsStock)
if err != nil { if err != nil && err != RecordNotFound {
logger.Error("err:", err) logger.Error("err:", err)
return false, err return false, err
} }
if err == RecordNotFound {
logger.Error("order stock out:")
return false, err
}
if gameCardGoodsStock.RentStock < cards[i].Count { if gameCardGoodsStock.RentStock < cards[i].Count {
logger.Error("order stock out ") logger.Error("order stock out ")
return false, errors.New("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 { func (m *Order) InventoryReduction(gdb *gorm.DB) error {
var cards []OrderCard 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 { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return err return err
} }
//fmt.Println("cards:", cards)
for i, _ := range 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) 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) fmt.Println("sql:", sql)
err := gdb.Exec(sql).Error err := gdb.Exec(sql).Error
@ -723,6 +748,10 @@ func (m *Order) InventoryReduction(gdb *gorm.DB) error {
return err return err
} }
} }
err = OrderCardUserRentCard(uint32(m.Uid), uint32(len(cards)), nil, gdb)
if err != nil {
logger.Error("err:", err)
}
return nil return nil
} }

View File

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

View File

@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/codinl/go-logger" "github.com/codinl/go-logger"
"github.com/jinzhu/gorm"
"mh-server/lib/utils" "mh-server/lib/utils"
"sync" "sync"
"time" "time"
@ -17,6 +18,7 @@ type User struct {
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员 MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
MemberExpire time.Time `json:"member_expire"` // 会员到期时间 MemberExpire time.Time `json:"member_expire"` // 会员到期时间
OpenMemberTime time.Time `json:"open_member_time"` // 开通会员
Bond uint32 `json:"bond"` // 保证金 Bond uint32 `json:"bond"` // 保证金
WxName string `json:"wx_name"` // 昵称 WxName string `json:"wx_name"` // 昵称
WxAvatar string `json:"wx_avatar"` // 头像 WxAvatar string `json:"wx_avatar"` // 头像
@ -183,8 +185,9 @@ type UserOpenMemberRecord struct {
Uid uint32 `json:"uid"` Uid uint32 `json:"uid"`
OpenNo string `json:"open_no" gorm:"index"` OpenNo string `json:"open_no" gorm:"index"`
OrderId uint32 `json:"order_id"` OrderId uint32 `json:"order_id"`
OrderType uint32 `json:"order_type"` // 1-物流支付 OrderType uint32 `json:"order_type"` // 1-物流支付 2-取消物流租卡
MemberLevel uint32 `json:"member_level"` MemberLevel uint32 `json:"member_level"`
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
} }
func (o *UserOpenMemberRecord) TableName() string { func (o *UserOpenMemberRecord) TableName() string {
@ -439,8 +442,11 @@ func GetUserMutex(mutexKey string) *sync.Mutex {
var AuthLoginMutex = 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{} //UserRentCard{}
if gdb == nil {
gdb = DB
}
var userRentCard UserRentCard var userRentCard UserRentCard
err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard) err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
@ -468,7 +474,7 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig)
CanRentCount: uint32(memberConfig.CardMax - count), CanRentCount: uint32(memberConfig.CardMax - count),
Status: 0, Status: 0,
} }
err := DB.Create(rentCard).Error err := gdb.Create(rentCard).Error
if err != nil { if err != nil {
logger.Error("err", err) logger.Error("err", err)
return err return err
@ -476,7 +482,7 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig)
return nil 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) 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 { if err != nil {
logger.Error("err", err) logger.Error("err", err)
return 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/tel", controller.UserTel) // 获取用户手机号
user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息 user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息
user.POST("open_member", controller.OpenMember) // 开通会员 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("pay_deposit", controller.PayDeposit) // 支付押金
user.POST("refund_deposit", controller.RefundDeposit) // 退押金 user.POST("refund_deposit", controller.RefundDeposit) // 退押金
user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录 user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录
@ -126,14 +127,14 @@ func ConfigAppRouter(r gin.IRouter) {
order.POST("express", controller.OrderExpress) // 订单物流 order.POST("express", controller.OrderExpress) // 订单物流
order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表 order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表
order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功 order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功
order.POST("cancel", controller.OrderCancel) // 订单取消 order.POST("cancel", controller.OrderCancel) // 取消租卡
order.Use(auth.UserAccessAuth) // TODO order.Use(auth.UserAccessAuth) // TODO
order.POST("create", controller.RentCardOrderCreate) // 创建租卡 order.POST("create", controller.RentCardOrderCreate) // 创建租卡
order.POST("pay", controller.OrderPay) // 租卡订单支付 order.POST("pay", controller.OrderPay) // 租卡订单支付
order.POST("list", controller.RentCardOrderList) // 租卡订单列表 order.POST("list", controller.RentCardOrderList) // 租卡订单列表
order.POST("revert", controller.OrderRevert) // 租卡订单归还 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("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款
order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货 order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货