CreateOrder返回的商品列表排序

This commit is contained in:
gazebo
2019-11-26 17:16:43 +08:00
parent e369341bdf
commit 026e73cc21
2 changed files with 33 additions and 8 deletions

View File

@@ -4,6 +4,7 @@ import (
"crypto/md5" "crypto/md5"
"fmt" "fmt"
"math" "math"
"sort"
"time" "time"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
@@ -35,12 +36,29 @@ type JxSkuInfo struct {
Weight int `json:"weight"` Weight int `json:"weight"`
} }
type JxSkuInfoList []*JxSkuInfo
func (l JxSkuInfoList) Len() int {
return len(l)
}
func (l JxSkuInfoList) Less(i, j int) bool {
if l[i].SkuID == l[j].SkuID {
return l[i].SalePrice < l[j].SalePrice
}
return l[i].SkuID < l[j].SkuID
}
func (l JxSkuInfoList) Swap(i, j int) {
l[i], l[j] = l[j], l[i]
}
type JxOrderInfo struct { type JxOrderInfo struct {
BuyerComment string `json:"buyerComment"` BuyerComment string `json:"buyerComment"`
StoreID int `json:"storeID"` StoreID int `json:"storeID"`
Skus []*JxSkuInfo `json:"skus"` Skus []*JxSkuInfo `json:"skus"`
ExpectedDeliveredTime *time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间 ExpectedDeliveredTimestamp int64 `json:"expectedDeliveredTimestamp"` // 预期送达时间
TotalPrice int64 `json:"totalPrice"` // 单位为分 订单总价 TotalPrice int64 `json:"totalPrice"` // 单位为分 订单总价
FreightPrice int64 `json:"freightPrice"` // 单位为分 订单配送费 FreightPrice int64 `json:"freightPrice"` // 单位为分 订单配送费
@@ -137,12 +155,14 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL
closeTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, beginDate) closeTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, beginDate)
openTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, beginDate) openTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, beginDate)
closeTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime2, beginDate) closeTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime2, beginDate)
timeInfo := &DeliveryDayTimeInfo{} timeInfo := &DeliveryDayTimeInfo{
Date: fmt.Sprintf("%s(周%s)", dayList[i], weekdayMap[int(beginDate.Weekday())]),
}
if i == 0 { if i == 0 {
timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{ timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{
ViewTime: "立即送出", ViewTime: "立即送出",
UnixTime: 0, UnixTime: 0,
ViewShippingFee: "6.6元配送费", ViewShippingFee: "6.6元配送费",
}) })
} }
deliverTimerList = append(deliverTimerList, timeInfo) deliverTimerList = append(deliverTimerList, timeInfo)
@@ -154,7 +174,7 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL
timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{ timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{
ViewTime: time2ShortTimeStr(deliveryTime), ViewTime: time2ShortTimeStr(deliveryTime),
UnixTime: deliveryTime.Unix(), UnixTime: deliveryTime.Unix(),
ViewShippingFee: "6.6元配送费", ViewShippingFee: "6.6元配送费",
}) })
} }
} }
@@ -260,12 +280,12 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
return nil, nil, fmt.Errorf("门店:%s状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status]) return nil, nil, fmt.Errorf("门店:%s状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
} }
checkTime := time.Now() checkTime := time.Now()
if jxOrder.ExpectedDeliveredTime == nil { if jxOrder.ExpectedDeliveredTimestamp == 0 {
if storeDetail.Status != model.StoreStatusOpened { if storeDetail.Status != model.StoreStatusOpened {
return nil, nil, fmt.Errorf("门店:%s不是营业状态,状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status]) return nil, nil, fmt.Errorf("门店:%s不是营业状态,状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
} }
} else { } else {
checkTime = *jxOrder.ExpectedDeliveredTime checkTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
if checkTime.Sub(time.Now()) < DingShiDaMinTime { if checkTime.Sub(time.Now()) < DingShiDaMinTime {
return nil, nil, fmt.Errorf("预订单只能在1小时后") return nil, nil, fmt.Errorf("预订单只能在1小时后")
} }
@@ -325,6 +345,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
} }
} }
} }
sort.Sort(JxSkuInfoList(outJxOrder.Skus))
if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", if outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat),
@@ -362,8 +383,8 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
} }
order.OrderCreatedAt = order.StatusTime order.OrderCreatedAt = order.StatusTime
order.VendorUserID = order.UserID order.VendorUserID = order.UserID
if jxOrder.ExpectedDeliveredTime != nil { if jxOrder.ExpectedDeliveredTimestamp == 0 {
order.ExpectedDeliveredTime = *jxOrder.ExpectedDeliveredTime order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
order.BusinessType = model.BusinessTypeDingshida order.BusinessType = model.BusinessTypeDingshida
} else { } else {
order.ExpectedDeliveredTime = utils.DefaultTimeValue order.ExpectedDeliveredTime = utils.DefaultTimeValue

View File

@@ -5,6 +5,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/wxpay" "git.rosy.net.cn/baseapi/platformapi/wxpay"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"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"
@@ -30,6 +31,9 @@ func pay4OrderByWX(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayTyp
TimeStart: wxpay.Time2PayTime(payCreatedAt), TimeStart: wxpay.Time2PayTime(payCreatedAt),
// TimeExpire: wxpay.Time2PayTime(payCreatedAt.Add(PayWaitingTime)), // TimeExpire: wxpay.Time2PayTime(payCreatedAt.Add(PayWaitingTime)),
} }
if authInfo, err := ctx.GetV2AuthInfo(); err == nil && authInfo.GetAuthType() == weixin.AuthTypeMini {
param.OpenID = authInfo.GetAuthID()
}
result, err := api.WxpayAPI.CreateUnifiedOrder(param) result, err := api.WxpayAPI.CreateUnifiedOrder(param)
if err == nil { if err == nil {
orderPay = &model.OrderPay{ orderPay = &model.OrderPay{