生成京西商城订单初始。。。

This commit is contained in:
gazebo
2019-11-13 10:49:55 +08:00
parent e8e7b324e0
commit 2ca58bd582

View File

@@ -0,0 +1,133 @@
package localjx
import (
"fmt"
"time"
"git.rosy.net.cn/baseapi/utils"
"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"
"git.rosy.net.cn/jx-callback/business/model/dao"
)
type JxSkuInfo struct {
SkuID int `json:"skuID"`
Count int `json:"count"`
Price int64 `json:"price,omitempty"` // 原价
SalePrice int64 `json:"salePrice,omitempty"` // 售卖价
}
type JxOrderInfo struct {
Skus []*JxSkuInfo `json:"skus"`
ExpectedDeliveredTime *time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
TotalPrice int64 `json:"totalPrice"` // 单位为分 订单总价
FreightPrice int64 `json:"freightPrice"` // 单位为分 订单配送费
OrderPrice int64 `json:"orderPrice"` // 单位为分 订单商品价格
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
}
func PreCreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, ExpectedDeliveredTime *time.Time) (outJxOrder *JxOrderInfo, err error) {
return outJxOrder, err
}
func formalizeSkus(skus []*JxSkuInfo) (outSkus []*JxSkuInfo) {
skuMap := make(map[int]int)
for _, v := range skus {
skuMap[v.SkuID] += v.Count
}
for skuID, skuCount := range skuMap {
outSkus = append(outSkus, &JxSkuInfo{
SkuID: skuID,
Count: skuCount,
})
}
return outSkus
}
func isTimeInOpTime(openTime1, closeTime1, openTime2, closeTime2 int16, time2Check time.Time) bool {
timeStrList := []string{
jxutils.OperationTime2StrWithSecond(openTime1),
jxutils.OperationTime2StrWithSecond(closeTime1),
}
if openTime1 > 0 {
timeStrList = append(timeStrList,
jxutils.OperationTime2StrWithSecond(openTime2),
jxutils.OperationTime2StrWithSecond(closeTime2),
)
}
checkTimeStr := utils.Time2TimeStr(time2Check)
for i := 0; i < len(timeStrList); i += 2 {
if checkTimeStr >= timeStrList[i] && checkTimeStr <= timeStrList[i+1] {
return true
}
}
return false
}
func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, storeID int, addressID int64, ExpectedDeliveredTime *time.Time) (outJxOrder *JxOrderInfo, err error) {
db := dao.GetDB()
// 配送范围检查
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX)
if err != nil {
return nil, err
}
addressList, _, err := dao.QueryUserDeliveryAddress(db, addressID, []string{ctx.GetUserID()}, 0, 0)
if err != nil {
return nil, err
}
if len(addressList) == 0 {
return nil, fmt.Errorf("地址ID不正确")
}
deliveryAddress := addressList[0]
if distance := jxutils.Point2StoreDistance(deliveryAddress.Lng, deliveryAddress.Lat, storeDetail.Lng, storeDetail.Lat, storeDetail.DeliveryRangeType, storeDetail.DeliveryRange); distance == 0 {
return nil, fmt.Errorf("送货地址:%s不在门店%s的配送范围", deliveryAddress.DetailAddress, storeDetail.Name)
}
// 营业状态及时间检查
if storeDetail.Status == model.StoreStatusDisabled {
return nil, fmt.Errorf("门店:%s状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
}
checkTime := time.Now()
if ExpectedDeliveredTime == nil {
if storeDetail.Status != model.StoreStatusOpened {
return nil, fmt.Errorf("门店:%s不是营业状态,状态是:%s", storeDetail.Name, model.StoreStatusName[storeDetail.Status])
}
} else {
checkTime = *ExpectedDeliveredTime
}
if !isTimeInOpTime(storeDetail.OpenTime1, storeDetail.CloseTime1, storeDetail.OpenTime2, storeDetail.CloseTime2, checkTime) {
return nil, fmt.Errorf("门店:%s不在营业时间范围", storeDetail.Name)
}
skus := formalizeSkus(jxOrder.Skus)
var skuIDs []int
for _, v := range skus {
skuIDs = append(skuIDs, v.SkuID)
}
storeSkuList, err := dao.GetStoresSkusInfo(db, []int{storeID}, skuIDs)
if err != nil {
return nil, err
}
storeSkuMap := make(map[int]*model.StoreSkuBind)
for _, v := range storeSkuList {
storeSkuMap[v.SkuID] = v
}
outJxOrder = &JxOrderInfo{}
for _, v := range skus {
outJxOrder.Skus = append(outJxOrder.Skus, &JxSkuInfo{
SkuID: v.SkuID,
Count: v.Count,
Price: v.Price,
SalePrice: v.SalePrice,
})
outJxOrder.TotalPrice += int64(v.Count) * v.SalePrice
}
return outJxOrder, err
}