+Pay4Order

This commit is contained in:
gazebo
2019-11-20 15:55:09 +08:00
parent ea49b20528
commit 1195e194a1
11 changed files with 205 additions and 11 deletions

View File

@@ -3,6 +3,7 @@ package localjx
import (
"crypto/md5"
"fmt"
"math"
"time"
"git.rosy.net.cn/baseapi/utils"
@@ -16,6 +17,8 @@ import (
const (
OrderCreateTypePre = 0 // 预创建
OrderCreateTypeNormal = 1 // 正常创建
PayWaitingTime = 10 * time.Minute // 等待支付的最长时间
)
type JxSkuInfo struct {
@@ -42,7 +45,14 @@ type JxOrderInfo struct {
OrderID int64 `json:"orderID"`
StoreName string `json:"storeName"`
PayID string `json:"payID"`
}
var (
orderNoBeginTimestamp int64
)
func init() {
orderNoBeginTimestamp = utils.Str2Time("2010-01-01 00:00:00").Unix()
}
func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int) (outJxOrder *JxOrderInfo, err error) {
@@ -54,7 +64,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64,
if outJxOrder.TotalPrice != jxOrder.TotalPrice {
return nil, fmt.Errorf("商品或配送信息发生改变,请重新下单")
}
outJxOrder.OrderID = GenOrderNo()
outJxOrder.OrderID = GenOrderNo(ctx)
order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress)
if err = err2; err == nil {
partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
@@ -63,14 +73,45 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64,
return outJxOrder, err
}
func GenOrderNo() (orderNo int64) {
orderNo = time.Now().Unix()*100000 + 88000000000000000
func Pay4Order(ctx *jxcontext.Context, orderID int64, payType int, vendorPayType string) (orderPay *model.OrderPay, err error) {
order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(orderID), model.VendorIDJX)
if err == nil {
switch payType {
case model.PayTypeWX:
orderPay, err = pay4OrderByWX(ctx, order, vendorPayType)
default:
err = fmt.Errorf("支付方式:%d当前不支持", payType)
}
}
return orderPay, err
}
func OnPayFinished(orderPay *model.OrderPay) (err error) {
order, err := partner.CurOrderManager.LoadOrder(orderPay.VendorOrderID, orderPay.VendorID)
if err == nil {
db := dao.GetDB()
dao.UpdateEntity(db, orderPay)
order.Status = model.OrderStatusNew
order.StatusTime = *orderPay.PayFinishedAt
// OnOrderNew逻辑需要修改
// err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
}
return err
}
func GenOrderNo(ctx *jxcontext.Context) (orderNo int64) {
const randPartNum = 1000
orderNo = time.Now().Unix() - orderNoBeginTimestamp
// fmt.Println(orderNo)
orderNo = orderNo * randPartNum
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
randPart := 0
for k, v := range md5Bytes {
randPart += int(v) << ((k % 3) * 8)
}
return orderNo + int64(randPart%10000)
orderNo += int64(randPart % randPartNum)
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * 88
return orderNo
}
func formalizeSkus(skus []*JxSkuInfo) (outSkus []*JxSkuInfo) {
@@ -140,6 +181,9 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
}
} else {
checkTime = *jxOrder.ExpectedDeliveredTime
if utils.Time2Date(time.Now()).Sub(utils.Time2Date(checkTime)) > 24*time.Hour {
return nil, nil, fmt.Errorf("预订单只能预定当天或第二天")
}
}
if !isTimeInOpTime(storeDetail.OpenTime1, storeDetail.CloseTime1, storeDetail.OpenTime2, storeDetail.CloseTime2, checkTime) {
return nil, nil, fmt.Errorf("门店:%s不在营业时间范围", storeDetail.Name)