Files
jx-callback/business/jxstore/cms/order.go
苏尹岚 5088d49c0c wxpay
2020-11-23 10:12:52 +08:00

150 lines
4.2 KiB
Go

package cms
import (
"fmt"
"time"
"git.rosy.net.cn/jx-callback/business/auth2"
"git.rosy.net.cn/jx-callback/globals"
"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 int, way string, price int, lng, lat float64) (orderID string, err error) {
var (
db = dao.GetDB()
order *model.Order
)
if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil {
return "", err
}
address, dCode, cCode, err := getAddressInfoFromCoord(db, lng, lat)
order = &model.Order{
OrderID: utils.Int64ToStr(jxutils.GenOrderNo()),
UserID: ctx.GetUserID(),
Type: orderType,
Way: way,
Status: model.OrderStatusWait4Pay,
PayPrice: price,
Lng: lng,
Lat: lat,
Address: address,
DistrictCode: dCode,
CityCode: cCode,
}
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 *financial.WxPayParam, err error) {
var (
db = dao.GetDB()
order = &model.Order{
OrderID: orderID,
}
payHandler = &financial.PayHandler{
PayType: payType,
Ctx: ctx,
VendorPayType: vendorPayType,
}
)
globals.SugarLogger.Debugf("pay begin……")
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()
globals.SugarLogger.Debugf("result : %v", utils.Format4Output(payHandler.WxPayParam, false))
return payHandler.WxPayParam, 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")
if err != nil {
return errCode, err
}
if order.ID == 0 {
return errCode, fmt.Errorf("未找到此订单!")
}
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
}
func GetOrders(ctx *jxcontext.Context, orderID string, orderType int, cityCodes []int, fromTime, toTime, keyword string, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
return dao.GetOrders(dao.GetDB(), orderID, orderType, cityCodes, utils.Str2Time(fromTime), utils.Str2Time(toTime), keyword, offset, pageSize)
}
func FinishedCashOrders(ctx *jxcontext.Context, orderIDs []string) (err error) {
var (
db = dao.GetDB()
)
for _, orderID := range orderIDs {
order := &model.Order{
OrderID: orderID,
}
dao.GetEntity(db, order, "OrderID")
if order.ID != 0 && order.Status == model.OrderStatusWait4Pay {
order.PayFinishedAt = time.Now()
order.Comment = "手动转账"
order.Status = model.OrderStatusFinished
dao.UpdateEntity(db, order, "PayFinishedAt", "Comment", "Status")
}
}
return err
}