新增混合支付+完善新会员充值
This commit is contained in:
@@ -118,6 +118,67 @@ func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType, app
|
||||
return payHandler.WxPayParam, err
|
||||
}
|
||||
|
||||
var (
|
||||
NotPay = 2 //订单待支付
|
||||
AlreadyPay = 1 //订单已支付
|
||||
)
|
||||
|
||||
//余额支付 微信补差值
|
||||
func PayByBalance(ctx *jxcontext.Context, orderID string, payType, restPrice int, appID, vendorPayType string) (errMsg string, err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
//获取订单信息
|
||||
orderInfo, err := dao.GetOrderByID(db, orderID)
|
||||
if err != nil {
|
||||
return "获取订单信息失败", err
|
||||
}
|
||||
//获取用户 会员账户信息
|
||||
userBill, err := dao.GetUserBill(db, orderInfo.UserID, "")
|
||||
if err != nil {
|
||||
return "获取用户会员账户余额失败", err
|
||||
}
|
||||
txDB, _ := dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
dao.Rollback(db, txDB)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if orderInfo.Status == NotPay {
|
||||
if userBill.AccountBalance > 0 {
|
||||
//余额 全款支付
|
||||
if userBill.AccountBalance > orderInfo.PayPrice && userBill.AccountBalance-orderInfo.PayPrice > 0 {
|
||||
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypePayByAccountBalance, orderInfo.PayPrice, 0); err != nil {
|
||||
dao.Rollback(db, txDB)
|
||||
return "使用余额支付失败:", err
|
||||
}
|
||||
orderInfo.Status = AlreadyPay
|
||||
} else {
|
||||
//需支付部分
|
||||
//restPrice := orderInfo.PayPrice - userBill.AccountBalance
|
||||
orderInfo.PayPrice = restPrice
|
||||
if _, err := Pay(ctx, orderInfo.OrderID, payType, vendorPayType, appID); err != nil {
|
||||
return "微信支付失败:", err
|
||||
}
|
||||
//支付成功后修改余额为0
|
||||
if err := dao.UpdateUserBill(orderInfo.UserID, 0); err != nil {
|
||||
dao.Rollback(db, txDB)
|
||||
return "余额修改失败:", err
|
||||
}
|
||||
//增加一条用户账单
|
||||
if err = financial.AddBillExpend(txDB, userBill.BillID, model.BillTypePayByAccountBalance, orderInfo.PayPrice, 0); err != nil {
|
||||
dao.Rollback(db, txDB)
|
||||
return "使用余额支付失败:", err
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
dao.Commit(db, txDB)
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
func Cash(ctx *jxcontext.Context, orderID string, payType int, vendorPayType string) (errCode string, err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
@@ -146,6 +207,15 @@ func GetOrders(ctx *jxcontext.Context, orderID, userID string, orderType int, ci
|
||||
return dao.GetOrders(dao.GetDB(), orderID, userID, orderType, cityCodes, utils.Str2Time(fromTime), utils.Str2Time(toTime), keyword, offset, pageSize)
|
||||
}
|
||||
|
||||
//id获取订单详情(单条查询)
|
||||
//func GetOrderByID(ctx *jxcontext.Context, orderID int) (errMsg string, err error) {
|
||||
// //var db = dao.GetDB()
|
||||
// if _, err := dao.GetOrderByID(dao.GetDB(), orderID); err != nil {
|
||||
// return "id获取订单详情失败", err
|
||||
// }
|
||||
// return "", err
|
||||
//}
|
||||
|
||||
func FinishedCashOrders(ctx *jxcontext.Context, orderIDs []string) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
|
||||
@@ -555,15 +555,6 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo
|
||||
memberCard = v
|
||||
}
|
||||
}
|
||||
if !isFree {
|
||||
//验证微信绑定
|
||||
if err = auth2.CheckWeixinminiAuthBind(userIDReal); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if userBill.AccountBalance < memberCard.ActPrice {
|
||||
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
|
||||
}
|
||||
}
|
||||
txDB, _ := dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
@@ -571,6 +562,19 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if !isFree {
|
||||
//验证微信绑定
|
||||
if err = auth2.CheckWeixinminiAuthBind(userIDReal); err != nil {
|
||||
return "", err
|
||||
}
|
||||
if userBill.AccountBalance < memberCard.ActPrice {
|
||||
//if _, err := financial.WXInvestMember(ctx, userMembers[0].MemberTypeID, userMembers[0].UserID); err != nil {
|
||||
// dao.Rollback(db, txDB)
|
||||
//}
|
||||
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
|
||||
}
|
||||
}
|
||||
|
||||
//证明已经开了会员了,相当于续费
|
||||
if len(userMembers) > 0 {
|
||||
userMember := userMembers[0]
|
||||
@@ -601,7 +605,6 @@ func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bo
|
||||
}
|
||||
}
|
||||
if !isFree {
|
||||
|
||||
//支出明细
|
||||
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypeMember, memberCard.ActPrice, 0); err != nil {
|
||||
dao.Rollback(db, txDB)
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"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"
|
||||
)
|
||||
@@ -168,6 +167,7 @@ func SettleUnionOrders(ctx *jxcontext.Context, vendorIDs []int) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
//微信 老会员续费
|
||||
func WXInvestMember(ctx *jxcontext.Context, memberID int, userID string) (errCode string, err error) {
|
||||
var db = dao.GetDB()
|
||||
//获取用户 当前会员信息
|
||||
@@ -176,12 +176,10 @@ func WXInvestMember(ctx *jxcontext.Context, memberID int, userID string) (errCod
|
||||
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)
|
||||
}
|
||||
@@ -204,6 +202,25 @@ func WXInvestMember(ctx *jxcontext.Context, memberID int, userID string) (errCod
|
||||
return "开通会员失败", err
|
||||
}
|
||||
}
|
||||
globals.SugarLogger.Debugf("==================== %d", cnt)
|
||||
return errCode, err
|
||||
}
|
||||
|
||||
//微信 新充值会员
|
||||
func WXInvestMemberNew(ctx *jxcontext.Context, memberID int, userID string) (errCode string, err error) {
|
||||
var db = dao.GetDB()
|
||||
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
|
||||
}
|
||||
return errCode, err
|
||||
}
|
||||
|
||||
@@ -296,13 +296,9 @@ func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) {
|
||||
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
|
||||
switch order.OrderType {
|
||||
case model.PayType4Express:
|
||||
<<<<<<< HEAD
|
||||
err = q_bida.CreateOrder2QBiDa(&userOrder)
|
||||
=======
|
||||
err = q_bida.CreateOrder2QBiDa(&userOrder, order.OrderID)
|
||||
case model.PayType4Member, model.PayType4Recharge:
|
||||
err = OnPayFinished(order)
|
||||
>>>>>>> 273aa3164fbc887ac30837bd4ce1b25410ca498c
|
||||
}
|
||||
}
|
||||
return err
|
||||
|
||||
@@ -105,12 +105,27 @@ func OnCashFinished(order *model.Order) (err error) {
|
||||
//微信支付充值会员
|
||||
func OnWXPayFinished(order *model.Order) (err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
ctx *jxcontext.Context
|
||||
)
|
||||
globals.SugarLogger.Debugf("OnWXPayFinished begin modify account order: %v", utils.Format4Output(order, false))
|
||||
//判断是新会员充值还是老会员续费
|
||||
userMembers, err := dao.GetUserMember(db, order.UserID, model.MemberTypeNormal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//根据订单类型来操作账户
|
||||
if order.Type == model.OrderTypePay {
|
||||
_, err = WXInvestMember(ctx, order.OrderType, order.UserID)
|
||||
//为新会员生成会员信息并充值
|
||||
if len(userMembers) > 0 {
|
||||
if _, err := WXInvestMember(ctx, order.OrderType, order.UserID); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if _, err := WXInvestMemberNew(ctx, order.OrderType, order.UserID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("OnWXPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false))
|
||||
return fmt.Errorf("暂不支持此订单类型!")
|
||||
|
||||
@@ -12,9 +12,11 @@ const (
|
||||
BillTypeDropShippingDeposit = 18 //一件代发保证金
|
||||
BillTypeUnionShare = 19 //联盟任务分成
|
||||
|
||||
BillTypeMember = 20 //开通会员
|
||||
|
||||
BillTypeQuitGroup = 30 //退群
|
||||
BillTypeMember = 20 //开通会员
|
||||
BillTypePayByAccountBalance = 25 //余额支付
|
||||
BillTypePayByMixPay1 = 26 //混合支付中的 余额部分状态码
|
||||
BillTypePayByMixPay2 = 27 //混合支付中的 微信部分状态码
|
||||
BillTypeQuitGroup = 30 //退群
|
||||
|
||||
BillTypeJdWaybillOverWeight = 40 //京东物流超重扣款
|
||||
|
||||
|
||||
@@ -124,6 +124,22 @@ type GetOrdersResult struct {
|
||||
Mobile string `json:"mobile"`
|
||||
}
|
||||
|
||||
var TableOrder = "order"
|
||||
|
||||
func GetOrderByID(db *DaoDB, orderID string) (orderInfos *model.Order, err error) {
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
sql := `SELECT * FROM %s WHERE order_id = ?`
|
||||
sqlParams = append(sqlParams, TableOrder, orderID)
|
||||
txDB, _ := Begin(db)
|
||||
defer Commit(db, txDB)
|
||||
if err = GetRowsTx(txDB, &orderInfos, sql, sqlParams); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return orderInfos, err
|
||||
}
|
||||
|
||||
func GetOrders(db *DaoDB, orderID, userID string, orderType int, cityCodes []int, fromTime, toTime time.Time, keyword string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||
var orders []*GetOrdersResult
|
||||
sql := `
|
||||
|
||||
@@ -30,6 +30,29 @@ func (c *OrderController) Pay() {
|
||||
})
|
||||
}
|
||||
|
||||
// @PayByBalance 余额支付
|
||||
// @Description 支付
|
||||
// @Param token header string true "认证token"
|
||||
// @Param orderID formData string true "订单号"
|
||||
// @Param payType formData int true "支付平台类型"
|
||||
// @Param vendorPayType formData string true "平台支付类型"
|
||||
// @Param orderType formData string true "订单类型member(会员),express快递,recharge充值"
|
||||
// @Param appId formData string true "appId"
|
||||
// @Param restPrice formData int true "需要微信支付的价格"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /PayByBalance [post]
|
||||
|
||||
func (c *OrderController) PayByBalance() {
|
||||
c.callPayByBalance(func(params *tPayByBalanceParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = cms.PayByBalance(params.Ctx, params.OrderID, params.RestPrice, params.PayType, params.VendorPayType, params.AppId)
|
||||
return retVal, "", err
|
||||
})
|
||||
//if _, err := financial.PayByBalance(orderID, payType, restPrice, appID, vendorPayType); err != nil {
|
||||
// return err
|
||||
//}
|
||||
}
|
||||
|
||||
// @Title 提现
|
||||
// @Description 提现
|
||||
// @Param token header string true "认证token"
|
||||
|
||||
Reference in New Issue
Block a user