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"
"fmt"
"math"
"sort"
"time"
"git.rosy.net.cn/baseapi/utils"
@@ -35,12 +36,29 @@ type JxSkuInfo struct {
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 {
BuyerComment string `json:"buyerComment"`
StoreID int `json:"storeID"`
Skus []*JxSkuInfo `json:"skus"`
ExpectedDeliveredTime *time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
ExpectedDeliveredTimestamp int64 `json:"expectedDeliveredTimestamp"` // 预期送达时间
TotalPrice int64 `json:"totalPrice"` // 单位为分 订单总价
FreightPrice int64 `json:"freightPrice"` // 单位为分 订单配送费
@@ -137,12 +155,14 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL
closeTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, beginDate)
openTime2 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, 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 {
timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{
ViewTime: "立即送出",
UnixTime: 0,
ViewShippingFee: "6.6元配送费",
ViewShippingFee: "6.6元配送费",
})
}
deliverTimerList = append(deliverTimerList, timeInfo)
@@ -154,7 +174,7 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL
timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{
ViewTime: time2ShortTimeStr(deliveryTime),
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])
}
checkTime := time.Now()
if jxOrder.ExpectedDeliveredTime == nil {
if jxOrder.ExpectedDeliveredTimestamp == 0 {
if storeDetail.Status != model.StoreStatusOpened {
return nil, nil, fmt.Errorf("门店:%s不是营业状态,状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
}
} else {
checkTime = *jxOrder.ExpectedDeliveredTime
checkTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
if checkTime.Sub(time.Now()) < DingShiDaMinTime {
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, "",
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.VendorUserID = order.UserID
if jxOrder.ExpectedDeliveredTime != nil {
order.ExpectedDeliveredTime = *jxOrder.ExpectedDeliveredTime
if jxOrder.ExpectedDeliveredTimestamp == 0 {
order.ExpectedDeliveredTime = utils.Timestamp2Time(jxOrder.ExpectedDeliveredTimestamp)
order.BusinessType = model.BusinessTypeDingshida
} else {
order.ExpectedDeliveredTime = utils.DefaultTimeValue

View File

@@ -5,6 +5,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/wxpay"
"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/jxcontext"
"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),
// 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)
if err == nil {
orderPay = &model.OrderPay{