diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index fad28eb44..15b795bed 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -787,7 +787,7 @@ func GetSelfInfo(ctx *jxcontext.Context) (getSelfInfoResult *GetSelfInfoResult, tokenInfo, err := auth2.GetTokenInfo(ctx.GetToken()) if err == nil { if user, err2 := dao.GetUserByID(dao.GetDB(), "user_id", tokenInfo.GetID()); err2 == nil { - if userMembers, err3 := dao.GetUserMember(dao.GetDB(), user.UserID, "", 0); err3 == nil { + if userMembers, err3 := dao.GetUserMember(dao.GetDB(), user.UserID, "", 0, model.YES); err3 == nil { getSelfInfoResult = &GetSelfInfoResult{ User: user, UserMembers: userMembers, @@ -1140,3 +1140,7 @@ func CleanUserOrderSMSMark(ctx *jxcontext.Context) (err error) { } return err } + +func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) { + return err +} diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index ce8925a4a..0962cee89 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -267,6 +267,8 @@ func Init() { ScheduleTimerFunc("ChangeJxPriceByDiscountAct", func() { act.ChangeJxPriceByDiscountAct(jxcontext.AdminCtx) }, discountActJxList) + ScheduleTimerFunc("RefreshUserMemberStatus", func() { + }, updateActStatusTimeList) } ScheduleTimerFunc("AutoSaleStoreSku", func() { cms.AutoSaleStoreSku(jxcontext.AdminCtx, nil, false) diff --git a/business/jxutils/jxcontext/jxcontext.go b/business/jxutils/jxcontext/jxcontext.go index b7a46648e..69ad6985a 100644 --- a/business/jxutils/jxcontext/jxcontext.go +++ b/business/jxutils/jxcontext/jxcontext.go @@ -4,6 +4,7 @@ import ( "errors" "net/http" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -56,7 +57,7 @@ func New(notUsed interface{}, token string, w http.ResponseWriter, r *http.Reque authInfo, err2 := auth2.GetTokenInfo(token) if err = err2; err == nil { ctx.userInfo = authInfo - // globals.SugarLogger.Debugf("jxcontext New, V2 authInfo:%s", utils.Format4Output(authInfo, true)) + globals.SugarLogger.Debugf("jxcontext New, V2 authInfo:%s", utils.Format4Output(authInfo, true)) if authInfo.TokenType != auth2.TokenTypeNormal { err = errors.New("需要正式TOKEN") } diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go index 231f0825a..4cc4733eb 100644 --- a/business/model/dao/dao_user.go +++ b/business/model/dao/dao_user.go @@ -259,7 +259,7 @@ func GetUserOrderSMS(db *DaoDB, mobile, name string) (userOrderSms *model.UserOr return userOrderSms, err } -func GetUserMember(db *DaoDB, userID, vendorOrderID string, memberType int) (userMembers []*model.UserMember, err error) { +func GetUserMember(db *DaoDB, userID, vendorOrderID string, memberType, isPay int) (userMembers []*model.UserMember, err error) { sql := ` SELECT * FROM user_member @@ -278,5 +278,9 @@ func GetUserMember(db *DaoDB, userID, vendorOrderID string, memberType int) (use sql += " AND member_type = ?" sqlParams = append(sqlParams, memberType) } + if isPay != 0 { + sql += " AND is_pay = ?" + sqlParams = append(sqlParams, isPay) + } return userMembers, err } diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index bb8c208ec..4f3435750 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -362,6 +362,10 @@ func Pay4User(ctx *jxcontext.Context, thingID, payType int, vendorPayType string return nil, err } discountCard := findDiscountCard(dicountCards, thingID) + flag, userMemberOrigin, err := checkMember(db, ctx.GetUserID(), discountCard) + if err != nil { + return nil, err + } vendorOrderID = utils.Int64ToStr(GenOrderNo(ctx)) order = &model.GoodsOrder{ VendorOrderID: vendorOrderID, @@ -381,7 +385,12 @@ func Pay4User(ctx *jxcontext.Context, thingID, payType int, vendorPayType string IsPay: model.NO, } dao.WrapAddIDCULDEntity(userMember, ctx.GetUserName()) - dao.CreateEntity(db, userMember) + if flag == 0 { + dao.CreateEntity(db, userMember) + } else if flag == 1 { + userMemberOrigin.EndAt = userMemberOrigin.EndAt.AddDate(0, 1, 0) + dao.UpdateEntity(db, userMemberOrigin, "EndAt") + } } default: err = fmt.Errorf("支付方式:%d当前不支持", payType) @@ -389,6 +398,25 @@ func Pay4User(ctx *jxcontext.Context, thingID, payType int, vendorPayType string return orderPay, err } +//flag +//0 正常购买 +//1 续费 +//-1 不能购买 +func checkMember(db *dao.DaoDB, userID string, discountCard *model.DiscountCard) (flag int, userMember *model.UserMember, err error) { + userMembers, err := dao.GetUserMember(db, userID, "", model.MemberTypeDiscountCard, model.YES) + if len(userMembers) > 0 { + userMember = userMembers[0] + if userMember.ID < discountCard.ID { + return 0, userMember, err + } else if userMember.ID == discountCard.ID { + return 1, userMember, err + } else { + return -1, userMember, fmt.Errorf("已购买更高档次的会员,无法继续购买!") + } + } + return 0, userMember, err +} + func time2ShortTimeStr(t time.Time) string { return t.Format("15:04") } @@ -497,7 +525,7 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) { } else { switch orderPay.PayType { case model.PayTypeTL_DiscountCard: - userMembers, _ := dao.GetUserMember(dao.GetDB(), "", orderPay.VendorOrderID, model.MemberTypeDiscountCard) + userMembers, _ := dao.GetUserMember(dao.GetDB(), "", orderPay.VendorOrderID, model.MemberTypeDiscountCard, model.NO) if len(userMembers) > 0 { userMembers[0].IsPay = model.YES dao.UpdateEntity(dao.GetDB(), userMembers[0], "IsPay") @@ -930,7 +958,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 } else { tuserID = userID } - userMembers, _ := dao.GetUserMember(db, tuserID, "", model.MemberTypeDiscountCard) + userMembers, _ := dao.GetUserMember(db, tuserID, "", model.MemberTypeDiscountCard, model.YES) if len(userMembers) > 0 { if configList, err := dao.QueryConfigs(db, "会员折扣卡", model.ConfigTypeDiscountCard, ""); err == nil { jxutils.Strings2Objs(configList[0].Value, &dicountCards) @@ -941,7 +969,6 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 outJxOrder.ActualPayPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice } else if jxOrder.OrderType == model.OrderTypeDefendPrice { outJxOrder.Skus[0].DefendPrice = jxOrder.Skus[0].DefendPrice - } else { outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice outJxOrder.ActualPayPrice = outJxOrder.TotalPrice