mixpay
This commit is contained in:
@@ -3,6 +3,7 @@ package cms
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
||||||
|
"github.com/astaxie/beego/client/orm"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -129,12 +130,13 @@ var (
|
|||||||
//余额支付 微信补差值
|
//余额支付 微信补差值
|
||||||
func PayByBalance(ctx *jxcontext.Context, orderID string, restPrice, payType int, vendorPayType, appID string) (*financial.WxPayParam, string, error) {
|
func PayByBalance(ctx *jxcontext.Context, orderID string, restPrice, payType int, vendorPayType, appID string) (*financial.WxPayParam, string, error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
//wxPayParam *financial.WxPayParam
|
txDB orm.TxOrmer
|
||||||
)
|
)
|
||||||
//获取订单信息
|
//获取订单信息
|
||||||
globals.SugarLogger.Debug("begin get order+info")
|
globals.SugarLogger.Debug("begin get order_info")
|
||||||
orderInfo, err := dao.GetOrderByID(db, orderID)
|
orderInfo, err := dao.GetOrderByID(db, orderID)
|
||||||
|
//tempPrice := orderInfo.PayPrice
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "获取订单信息失败", err
|
return nil, "获取订单信息失败", err
|
||||||
}
|
}
|
||||||
@@ -145,54 +147,49 @@ func PayByBalance(ctx *jxcontext.Context, orderID string, restPrice, payType int
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "获取用户会员账户余额失败", err
|
return nil, "获取用户会员账户余额失败", err
|
||||||
}
|
}
|
||||||
txDB, _ := dao.Begin(db)
|
|
||||||
defer func() {
|
|
||||||
if r := recover(); r != nil {
|
|
||||||
dao.Rollback(db, txDB)
|
|
||||||
panic(r)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
if orderInfo.Status == NotPay {
|
if orderInfo.Status == NotPay {
|
||||||
globals.SugarLogger.Debug("进入账单未支付")
|
globals.SugarLogger.Debug("进入账单未支付")
|
||||||
globals.SugarLogger.Debug("user_bill.balance==================", userBill.AccountBalance)
|
globals.SugarLogger.Debug("user_bill.balance==================", userBill.AccountBalance)
|
||||||
if userBill.AccountBalance > 0 && restPrice == 0 {
|
// (3)使用余额且 余额大于支付金额
|
||||||
//余额 全款支付
|
if userBill.AccountBalance > 0 && userBill.AccountBalance > orderInfo.PayPrice && restPrice == 0 {
|
||||||
|
//余额>0
|
||||||
globals.SugarLogger.Debug("进入余额支付部分")
|
globals.SugarLogger.Debug("进入余额支付部分")
|
||||||
if userBill.AccountBalance > orderInfo.PayPrice && userBill.AccountBalance-orderInfo.PayPrice > 0 {
|
if userBill.AccountBalance > orderInfo.PayPrice && userBill.AccountBalance-orderInfo.PayPrice > 0 {
|
||||||
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypePayByAccountBalance, orderInfo.PayPrice, 0); err != nil {
|
if err = financial.AddExpendUpdateAccount(txDB, userBill, model.BillTypePayByAccountBalance, orderInfo.PayPrice, 0); err != nil {
|
||||||
dao.Rollback(db, txDB)
|
|
||||||
return nil, "使用余额支付失败:", err
|
return nil, "使用余额支付失败:", err
|
||||||
}
|
}
|
||||||
orderInfo.Status = AlreadyPay
|
//修改订单状态
|
||||||
|
orderInfo.Status = model.OrderStatusSuccessPay
|
||||||
|
orderInfo.PayMethod = 1 //1-余额支付,2-微信支付
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if restPrice != 0 {
|
if restPrice > 0 {
|
||||||
//需支付部分
|
//(1)用户不使用余额或者余额=0 即直接微信支付
|
||||||
//restPrice := orderInfo.PayPrice - userBill.AccountBalance
|
//if orderInfo.PayPrice == restPrice || userBill.AccountBalance == 0 {
|
||||||
globals.SugarLogger.Debug("进入混合支付部分")
|
// WxPayParam, err := Pay(ctx, orderInfo.OrderID, payType, vendorPayType, appID)
|
||||||
orderInfo.PayPrice = restPrice
|
// //orderInfo.PayMethod = 2 //微信支付方式
|
||||||
globals.SugarLogger.Debug("orderInfo.PayPrice=================", orderInfo.PayPrice)
|
// if err != nil {
|
||||||
//修改余额为0
|
// globals.SugarLogger.Debug("err=================", err)
|
||||||
if err := dao.UpdateUserBill(orderInfo.UserID, 0); err != nil {
|
// return nil, "微信支付失败:", err
|
||||||
globals.SugarLogger.Debug("修改余额失败")
|
// }
|
||||||
dao.Rollback(db, txDB)
|
// return WxPayParam, "", err
|
||||||
return nil, "余额修改失败:", err
|
//}
|
||||||
|
//(2)用户使用余额,剩余微信支付
|
||||||
|
if userBill.AccountBalance+restPrice != orderInfo.PayPrice {
|
||||||
|
return nil, "支付金额错误,请重新计算", err
|
||||||
}
|
}
|
||||||
//增加用户账单
|
if userBill.AccountBalance > 0 && userBill.AccountBalance < orderInfo.PayPrice {
|
||||||
globals.SugarLogger.Debug("开始创建用户账单")
|
globals.SugarLogger.Debug("进入混合支付部分")
|
||||||
globals.SugarLogger.Debug("微信需支付", orderInfo.PayPrice)
|
orderInfo.PayMethod = 5 //混合支付
|
||||||
if err = financial.AddBillExpend(txDB, userBill.BillID, model.BillTypePayByAccountBalance, orderInfo.PayPrice, 0); err != nil {
|
orderInfo.PayPrice = restPrice
|
||||||
globals.SugarLogger.Debug("创建账单失败")
|
globals.SugarLogger.Debug("orderInfo.PayPrice=================", orderInfo.PayPrice)
|
||||||
dao.Rollback(db, txDB)
|
|
||||||
return nil, "创建账单失败", err
|
|
||||||
}
|
}
|
||||||
WxPayParam, err := Pay(ctx, orderInfo.OrderID, payType, vendorPayType, appID)
|
WxPayParam, err := Pay(ctx, orderInfo.OrderID, payType, vendorPayType, appID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
dao.Rollback(db, txDB)
|
|
||||||
globals.SugarLogger.Debug("err=================", err)
|
globals.SugarLogger.Debug("err=================", err)
|
||||||
return nil, "微信支付失败:", err
|
return nil, "微信支付失败:", err
|
||||||
}
|
}
|
||||||
dao.Commit(db, txDB)
|
//orderInfo.PayPrice = tempPrice //存储原价
|
||||||
return WxPayParam, "", err
|
return WxPayParam, "", err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,17 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func AddMixPay(txDB orm.TxOrmer, orderID string, balancePrice, totalPrice, method int) error {
|
||||||
|
mixPayInfo := &model.MixPay{
|
||||||
|
OrderID: orderID,
|
||||||
|
BalancePrice: balancePrice,
|
||||||
|
TotalPrice: totalPrice,
|
||||||
|
Method: method,
|
||||||
|
}
|
||||||
|
dao.WrapAddIDCULEntity(mixPayInfo, jxcontext.AdminCtx.GetUserName())
|
||||||
|
return dao.CreateEntityTx(txDB, mixPayInfo)
|
||||||
|
}
|
||||||
|
|
||||||
func AddBillIncome(txDB orm.TxOrmer, billID int64, billType, incomePrice, jobID int) (err error) {
|
func AddBillIncome(txDB orm.TxOrmer, billID int64, billType, incomePrice, jobID int) (err error) {
|
||||||
billIncome := &model.BillIncome{
|
billIncome := &model.BillIncome{
|
||||||
BillID: billID,
|
BillID: billID,
|
||||||
@@ -50,6 +61,11 @@ func AddUserBillDb(db *dao.DaoDB, billID int64, userID string) (err error) {
|
|||||||
return dao.CreateEntity(db, userBillInsert)
|
return dao.CreateEntity(db, userBillInsert)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//func AddExpendMixPay(txDB orm.TxOrmer, userBill *model.UserBill, billType, price, jobID int) (err error) {
|
||||||
|
//err=AddMixPay()
|
||||||
|
//}
|
||||||
|
|
||||||
func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
|
func GetUserBillDetail(ctx *jxcontext.Context, userID, fromTime, toTime string, pageSize, offset int) (pagedInfo *model.PagedInfo, err error) {
|
||||||
return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
|
return dao.GetUserBillDetail(dao.GetDB(), userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), pageSize, offset)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -292,13 +292,30 @@ func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) {
|
|||||||
dao.Rollback(db, txdb)
|
dao.Rollback(db, txdb)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
//1-余额,2-微信,5-混合
|
||||||
|
if order.PayMethod == 5 {
|
||||||
|
userBill, err := dao.GetUserBill(db, order.UserID, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//创建混合支付账单
|
||||||
|
totalPrice := order.PayPrice + userBill.AccountBalance
|
||||||
|
if err := AddMixPay(txdb, order.OrderID, userBill.AccountBalance, totalPrice, 5); err != nil {
|
||||||
|
dao.Rollback(db, txdb)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//余额清空
|
||||||
|
if err := dao.UpdateUserBill(order.UserID, 0); err != nil {
|
||||||
|
globals.SugarLogger.Debug("修改余额失败")
|
||||||
|
dao.Rollback(db, txdb)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
dao.Commit(db, txdb)
|
dao.Commit(db, txdb)
|
||||||
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
|
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
|
||||||
switch order.OrderType {
|
switch order.OrderType {
|
||||||
case model.PayType4Express:
|
case model.PayType4Express:
|
||||||
err = q_bida.CreateOrder2QBiDa(&userOrder, order.OrderID)
|
err = q_bida.CreateOrder2QBiDa(&userOrder, order.OrderID)
|
||||||
case model.PayType4Member, model.PayType4Recharge:
|
|
||||||
err = OnPayFinished(order)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
|
"github.com/astaxie/beego/client/orm"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"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"
|
||||||
@@ -105,8 +106,9 @@ func OnCashFinished(order *model.Order) (err error) {
|
|||||||
//微信支付充值会员
|
//微信支付充值会员
|
||||||
func OnWXPayFinished(order *model.Order) (err error) {
|
func OnWXPayFinished(order *model.Order) (err error) {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
ctx *jxcontext.Context
|
ctx *jxcontext.Context
|
||||||
|
txDB orm.TxOrmer
|
||||||
)
|
)
|
||||||
globals.SugarLogger.Debugf("OnWXPayFinished begin modify account order: %v", utils.Format4Output(order, false))
|
globals.SugarLogger.Debugf("OnWXPayFinished begin modify account order: %v", utils.Format4Output(order, false))
|
||||||
//判断是新会员充值还是老会员续费
|
//判断是新会员充值还是老会员续费
|
||||||
@@ -126,6 +128,11 @@ func OnWXPayFinished(order *model.Order) (err error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
order.Status = model.OrderStatusFinished
|
||||||
|
//更新order状态
|
||||||
|
if _, err := dao.UpdateEntityTx(txDB, &order, "Status"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Debugf("OnWXPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false))
|
globals.SugarLogger.Debugf("OnWXPayFinished 暂不支持此订单类型 order: %v", utils.Format4Output(order, false))
|
||||||
return fmt.Errorf("暂不支持此订单类型!")
|
return fmt.Errorf("暂不支持此订单类型!")
|
||||||
|
|||||||
@@ -43,6 +43,24 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//混合支付详情表
|
||||||
|
type MixPay struct {
|
||||||
|
ModelIDCUL
|
||||||
|
|
||||||
|
OrderID string `orm:"column(order_id)" json:"order_id"` //账单ID 对应order表
|
||||||
|
BalancePrice int `orm:"column(balance_price)" json:"balance_price"` //余额支付部分
|
||||||
|
TotalPrice int `orm:"column(total_price)" json:"total_price"` //订单总额
|
||||||
|
WxPrice int `orm:"column(wx_price)" json:"wx_price"` //微信支付部分
|
||||||
|
Method int `orm:"column(method)" json:"method"` //支付方式 1-余额支付,2-微信支付,5-余额+微信混合支付
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *MixPay) TableIndex() [][]string {
|
||||||
|
return [][]string{
|
||||||
|
[]string{"OrderID"},
|
||||||
|
[]string{"CreatedAt"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//账单收入表
|
//账单收入表
|
||||||
type BillIncome struct {
|
type BillIncome struct {
|
||||||
ModelIDCUL
|
ModelIDCUL
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ type Order struct {
|
|||||||
CityCode int `orm:"default(0)" json:"cityCode"` // 提交订单时用户所在城市
|
CityCode int `orm:"default(0)" json:"cityCode"` // 提交订单时用户所在城市
|
||||||
DistrictCode int `orm:"default(0)" json:"districtCode"` // 城市code
|
DistrictCode int `orm:"default(0)" json:"districtCode"` // 城市code
|
||||||
Address string `orm:"size(255)" json:"address"` // 地址
|
Address string `orm:"size(255)" json:"address"` // 地址
|
||||||
PayMethod int `orm:"size(255)" json:"address"` // 支付方式1-余额支付,2-微信支付,3-微信提现,4-支付宝提现
|
PayMethod int `orm:"size(255)" json:"address"` // 支付方式1-余额支付,2-微信支付,3-微信提现,4-支付宝提现 5-余额+微信混合支付
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Order) TableUnique() [][]string {
|
func (v *Order) TableUnique() [][]string {
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ func (c *OrderController) Pay() {
|
|||||||
// @Failure 200 {object} controllers.CallResult
|
// @Failure 200 {object} controllers.CallResult
|
||||||
// @router /PayByBalance [post]
|
// @router /PayByBalance [post]
|
||||||
func (c *OrderController) PayByBalance() {
|
func (c *OrderController) PayByBalance() {
|
||||||
c.callPayByBalance(func(params *tOrderPayByBalanceParams) (interface{}, string, error) {
|
c.callPayByBalance(func(params *tOrderPayByBalanceParams) (retVal interface{}, errMsg string, err error) {
|
||||||
retVal, _, err := cms.PayByBalance(params.Ctx, params.OrderID, params.RestPrice, params.PayType, params.VendorPayType, params.AppId)
|
retVal, _, err = cms.PayByBalance(params.Ctx, params.OrderID, params.RestPrice, params.PayType, params.VendorPayType, params.AppId)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ func Init() {
|
|||||||
orm.RegisterModel(&model.UserBill{})
|
orm.RegisterModel(&model.UserBill{})
|
||||||
orm.RegisterModel(&model.BillIncome{})
|
orm.RegisterModel(&model.BillIncome{})
|
||||||
orm.RegisterModel(&model.BillExpend{})
|
orm.RegisterModel(&model.BillExpend{})
|
||||||
|
orm.RegisterModel(&model.MixPay{}) //混合支付
|
||||||
//支付订单
|
//支付订单
|
||||||
orm.RegisterModel(&model.Order{})
|
orm.RegisterModel(&model.Order{})
|
||||||
orm.RegisterModel(&model.DeliveryOrder{})
|
orm.RegisterModel(&model.DeliveryOrder{})
|
||||||
|
|||||||
Reference in New Issue
Block a user