104 lines
2.7 KiB
Go
104 lines
2.7 KiB
Go
package cms
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxstore/financial"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
|
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
|
|
"git.rosy.net.cn/jx-callback/business/model"
|
|
)
|
|
|
|
func CreateOrder(ctx *jxcontext.Context, orderType, price int) (orderID string, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
order *model.Order
|
|
)
|
|
order = &model.Order{
|
|
OrderID: utils.Int64ToStr(jxutils.GenOrderNo()),
|
|
UserID: ctx.GetUserID(),
|
|
Type: orderType,
|
|
Status: model.OrderStatusWait4Pay,
|
|
PayPrice: price,
|
|
}
|
|
dao.WrapAddIDCULEntity(order, ctx.GetUserName())
|
|
dao.Begin(db)
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
dao.Rollback(db)
|
|
panic(r)
|
|
}
|
|
}()
|
|
if err = dao.CreateEntity(db, order); err != nil {
|
|
dao.Rollback(db)
|
|
}
|
|
dao.Commit(db)
|
|
return order.OrderID, err
|
|
}
|
|
|
|
func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType string) (result *model.Order, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
order = &model.Order{
|
|
OrderID: orderID,
|
|
}
|
|
payHandler = &financial.PayHandler{
|
|
PayType: payType,
|
|
Ctx: ctx,
|
|
VendorPayType: vendorPayType,
|
|
}
|
|
)
|
|
err = dao.GetEntity(db, order, "OrderID")
|
|
if order.ID == 0 {
|
|
return result, fmt.Errorf("未找到此订单!")
|
|
}
|
|
payHandler.Order = order
|
|
//如果用户没有对应账单信息就给他生成一条
|
|
userBill, err := dao.GetUserBill(db, order.UserID, "")
|
|
if userBill == nil {
|
|
err = financial.AddUserBill(db, jxutils.GenBillID(), order.UserID)
|
|
}
|
|
err = payHandler.CreatePay()
|
|
return payHandler.Order, err
|
|
}
|
|
|
|
func Cash(ctx *jxcontext.Context, orderID string, payType int, vendorPayType string) (errCode string, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
order = &model.Order{
|
|
OrderID: orderID,
|
|
}
|
|
payHandler = &financial.PayHandler{
|
|
PayType: payType,
|
|
Ctx: ctx,
|
|
VendorPayType: vendorPayType,
|
|
}
|
|
)
|
|
err = dao.GetEntity(db, order, "OrderID")
|
|
payHandler.Order = order
|
|
//如果用户没有对应账单信息就给他生成一条
|
|
userBill, err := dao.GetUserBill(db, order.UserID, "")
|
|
if userBill == nil {
|
|
err = financial.AddUserBill(db, jxutils.GenBillID(), order.UserID)
|
|
}
|
|
if userBill.AccountBalance < order.PayPrice {
|
|
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
|
|
}
|
|
//用户一天只能提现一次
|
|
billExpends, err := dao.GetBillExpend(db, order.UserID, model.BillTypeCash, DayTimeBegin, DayTimeEnd)
|
|
if err != nil {
|
|
return errCode, err
|
|
}
|
|
if len(billExpends) > 0 {
|
|
return errCode, fmt.Errorf("抱歉,一天只能提现一次!")
|
|
}
|
|
err = payHandler.CreateRefund()
|
|
return errCode, err
|
|
}
|