diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 2d8afa446..aed58e059 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -541,6 +541,7 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo userMembers, err := dao.GetUserMember(db, userIDReal, model.MemberTypeNormal) configList, err := dao.QueryConfigs(db, model.ConfigTypeName[model.ConfigTypeMemberCard], model.ConfigTypeMemberCard, "") userBill, err := dao.GetUserBill(db, userIDReal, "") + if len(configList) <= 0 { return "", fmt.Errorf("未找到会员卡配置!") } diff --git a/business/jxstore/financial/bill.go b/business/jxstore/financial/bill.go index e5ef71dad..4d026cffd 100644 --- a/business/jxstore/financial/bill.go +++ b/business/jxstore/financial/bill.go @@ -1,11 +1,13 @@ package financial import ( + _ "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-print/globals" "github.com/astaxie/beego/client/orm" "time" ) @@ -165,3 +167,43 @@ func SettleUnionOrders(ctx *jxcontext.Context, vendorIDs []int) (err error) { dao.Commit(db, txDB) return err } + +func WXInvestMember(ctx *jxcontext.Context, memberID int, userID string) (errCode string, err error) { + var db = dao.GetDB() + //获取用户 当前会员信息 + userMembers, err := dao.GetUserMember(db, userID, model.MemberTypeNormal) + if err != nil { + return "获取用户会员信息失败", err + } + //当前状态是否是会员 续费/开通 + var cnt = 0 + if len(userMembers) > 0 { + userMember := userMembers[0] + if memberID == model.OrderTypeMember { + userMember.EndAt = userMember.EndAt.AddDate(0, 1, 0) + cnt++ + } else { + userMember.EndAt = userMember.EndAt.AddDate(1, 0, 0) + } + if _, err = dao.UpdateEntity(db, userMember, "EndAt"); err != nil { + return "更新会员到期时间失败", err + } + } else { + userMember2 := &model.UserMember{ + UserID: userID, + MemberType: model.MemberTypeNormal, + MemberTypeID: memberID, + } + if memberID == model.OrderTypeMember { + userMember2.EndAt = time.Now().AddDate(0, 1, 0) + } else { + userMember2.EndAt = time.Now().AddDate(1, 0, 0) + } + dao.WrapAddIDCULDEntity(userMember2, ctx.GetUserName()) + if err = dao.CreateEntity(db, userMember2); err != nil { + return "开通会员失败", err + } + } + globals.SugarLogger.Debugf("==================== %d", cnt) + return errCode, err +} diff --git a/business/jxstore/financial/bill_test.go b/business/jxstore/financial/bill_test.go new file mode 100644 index 000000000..1b732bcb7 --- /dev/null +++ b/business/jxstore/financial/bill_test.go @@ -0,0 +1,14 @@ +package financial + +import ( + "testing" +) + +func TestOnWXPayFinished(t *testing.T) { + //var ( + // ctx *jxcontext.Context + //) + //if _, err := WXInvestMember(ctx, 1, "1303D7B2096011ED9A4C525400C36BDA", true); err != nil { + // t.Logf("微信购买会员失败") + //} +} diff --git a/business/jxstore/financial/financial.go b/business/jxstore/financial/financial.go index 09c6928cf..454744be9 100644 --- a/business/jxstore/financial/financial.go +++ b/business/jxstore/financial/financial.go @@ -245,6 +245,7 @@ func OnTLPayCallback(call *tonglianpayapi.CallBackResult) (err error) { } func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) { + var count = 0 order := &model.Order{ OrderID: call.CusorderID, } @@ -268,39 +269,49 @@ func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) { payStatus = model.OrderStatusFailPay } - txdb, _ := dao.Begin(db) - defer func() { - if r := recover(); r != nil { - panic(r) + //充值会员 增加微信支付处理业务 + if (order.OrderType == 2 || order.OrderType == 5) && call.TrxStatus == tonglianpayapi.TrxStatusSuccess { + if err := OnWXPayFinished(order); err != nil { + return err } - }() - if _, err := dao.UpdateEntityTx(txdb, order); err != nil { - dao.Rollback(db, txdb) + count++ return err - } - - userOrder := model.UserVendorOrder{LocalWayBill: order.OrderID} - if err := dao.GetEntity(db, &userOrder, `LocalWayBill`); err != nil { - dao.Rollback(db, txdb) - return err - } - userOrder.OrderStatus = payStatus - if _, err := dao.UpdateEntityTx(txdb, &userOrder, "OrderStatus"); err != nil { - dao.Rollback(db, txdb) - return err - } - dao.Commit(db, txdb) - if call.TrxStatus == tonglianpayapi.TrxStatusSuccess { - switch order.OrderType { - case model.PayType4Express: - err = q_bida.CreateOrder2QBiDa(&userOrder) - case model.PayType4Member, model.PayType4Recharge: - err = OnPayFinished(order) + } else if order.OrderType == 3 { + txdb, _ := dao.Begin(db) + defer func() { + if r := recover(); r != nil { + panic(r) + } + }() + if _, err := dao.UpdateEntityTx(txdb, order); err != nil { + dao.Rollback(db, txdb) + return err } + userOrder := model.UserVendorOrder{LocalWayBill: order.OrderID} + if err := dao.GetEntity(db, &userOrder, `LocalWayBill`); err != nil { + dao.Rollback(db, txdb) + return err + } + userOrder.OrderStatus = payStatus + if _, err := dao.UpdateEntityTx(txdb, &userOrder, "OrderStatus"); err != nil { + dao.Rollback(db, txdb) + return err + } + dao.Commit(db, txdb) + if call.TrxStatus == tonglianpayapi.TrxStatusSuccess { + switch order.OrderType { + case model.PayType4Express: + err = q_bida.CreateOrder2QBiDa(&userOrder) + case model.PayType4Member, model.PayType4Recharge: + err = OnPayFinished(order) + } + } + return err } } else { globals.SugarLogger.Debugf("onTLpayFinished msg:%s, err:%v", utils.Format4Output(call, true), err) } + globals.SugarLogger.Debugf("=============aaaaaaaaa========== %d", count) return err } diff --git a/business/jxstore/financial/pay.go b/business/jxstore/financial/pay.go index 293446343..f4c50e1fe 100644 --- a/business/jxstore/financial/pay.go +++ b/business/jxstore/financial/pay.go @@ -2,7 +2,6 @@ package financial import ( "fmt" - "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" @@ -102,3 +101,22 @@ func OnCashFinished(order *model.Order) (err error) { globals.SugarLogger.Debugf("OnCashFinished end modify account ...") return err } + +//微信支付充值会员 +func OnWXPayFinished(order *model.Order) (err error) { + var ( + ctx *jxcontext.Context + ) + globals.SugarLogger.Debugf("OnWXPayFinished begin modify account order: %v", utils.Format4Output(order, false)) + //根据订单类型来操作账户 + if order.Type == model.OrderTypePay { + if _, err = WXInvestMember(ctx, order.OrderType, order.UserID); err != nil { + return err + } + } else { + globals.SugarLogger.Debugf("OnWXPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false)) + return fmt.Errorf("暂不支持此订单类型!") + } + globals.SugarLogger.Debugf("OnWXPayFinished end modify account ...") + return err +} diff --git a/business/model/order.go b/business/model/order.go index c8e80a8ec..9a74fb473 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -30,9 +30,10 @@ const ( OrderTypeCash = 2 //提现 OrderTypePublishJob = 1 //发布任务 - OrderTpyeMember = 2 //充值会员 + OrderTypeMember = 2 //充值会员月卡 + OrderTypeMemberYear = 5 //充值会员年卡 OrderTypeDelivery = 3 //发快递 - OrderTpyeDropShipping = 4 //一件代发交钱 + OrderTypeDropShipping = 4 //一件代发交钱 ) var ( @@ -58,7 +59,7 @@ type Order struct { OrderID string `orm:"column(order_id)" json:"orderID"` // 订单号 UserID string `orm:"column(user_id);size(48)" json:"userID"` // 用户ID Type int `json:"type"` // 支付还是提现 1-支付,2-提现 - OrderType int `json:"orderType"` // 订单类型,1-发任务,2-冲会员,3-发快递,4-提现 + OrderType int `json:"orderType"` // 订单类型,1-发任务,2-会员月卡,3-发快递,4-提现,5-会员年卡 Way string `json:"way"` // weixinapp ,weixinmini Status int `json:"status"` // 订单状态,待支付2,已支付5,支付成功110,支付失败115,150取消 PayPrice int `json:"payPrice"` // 支付金额