优化一下
This commit is contained in:
@@ -332,6 +332,7 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) {
|
||||
order.VendorStatus = utils.Int2Str(model.OrderStatusNew)
|
||||
order.StatusTime = *orderPay.PayFinishedAt
|
||||
err = callNewOrder(order)
|
||||
//如果是物料的订单,直接到拣货完成,配送中的状态
|
||||
if order.FromStoreID != 0 {
|
||||
PickupGoods(order, false, "jxadmin")
|
||||
}
|
||||
@@ -491,12 +492,12 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
}
|
||||
var (
|
||||
result *orderman.OrderCount
|
||||
sum int
|
||||
sum *int //申请物料的店的最近销量,以下会根据销量计算具体袋子的价格
|
||||
flag = false //新店袋子拆分当个参数
|
||||
)
|
||||
if fromStoreID != 0 {
|
||||
result, _ = orderman.GetMatterStoreOrderCount(nil, fromStoreID)
|
||||
sum = result.Count
|
||||
sum = &result.Count
|
||||
}
|
||||
for _, v := range skus {
|
||||
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
|
||||
@@ -509,6 +510,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
Weight: sku.Weight,
|
||||
Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0, sku.ExPrefix, sku.ExPrefixBegin, sku.ExPrefixEnd),
|
||||
}
|
||||
//活动商品要拆分,一分钱的单独列一个(count为1),正常价格的列在一起(count叠加)
|
||||
if storeSkuBind.ActPrice != 0 && storeSkuBind.ActPrice < storeSkuBind.JxPrice {
|
||||
jxSku.SalePrice = int64(storeSkuBind.ActPrice)
|
||||
jxSku.Count = 1
|
||||
@@ -532,7 +534,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||
} else { //以下else为物料订单袋子金额和数量处理
|
||||
if result.Count == 0 && result.Flag { //这个条件被认为是新店,袋子限量
|
||||
if bagMap[jxSku.SkuID] != 0 {
|
||||
if bagMap[jxSku.SkuID] != 0 { //如果他买了袋子,第一个袋子算1分钱,其余按原价(包括所有袋子)
|
||||
if !flag {
|
||||
jxSku.SalePrice = 1
|
||||
jxSku.Count = 1
|
||||
@@ -553,54 +555,37 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||
}
|
||||
} else {
|
||||
//袋子总数小于等于销量就是1分钱,只要大于销量其他就按原价
|
||||
var bagPriceCount = func(jxSku *JxSkuInfo, outJxOrder *JxOrderInfo, sum *int, count float64) {
|
||||
if bagMap[jxSku.SkuID] != 0 {
|
||||
if *sum > 0 {
|
||||
if bagMap[jxSku.SkuID]*jxSku.Count <= *sum+int(utils.Float64TwoInt64(count)) {
|
||||
jxSku.SalePrice = 1
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(1 * jxSku.Count)
|
||||
} else {
|
||||
jxSku2 := *jxSku
|
||||
jxSku2.SalePrice = jxSku.SalePrice
|
||||
jxSku2.Count = int(int64(jxSku.Count) - utils.Float64TwoInt64(math.Ceil(utils.Int2Float64(*sum)/count)))
|
||||
jxSku.SalePrice = 1
|
||||
jxSku.Count = int(utils.Float64TwoInt64(math.Ceil(utils.Int2Float64(*sum) / count)))
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, &jxSku2)
|
||||
outJxOrder.OrderPrice += jxSku.SalePrice * int64(jxSku.Count)
|
||||
outJxOrder.OrderPrice += jxSku2.SalePrice * int64(jxSku2.Count)
|
||||
}
|
||||
} else {
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||
}
|
||||
*sum = *sum - bagMap[jxSku.SkuID]*jxSku.Count
|
||||
}
|
||||
}
|
||||
//这个袋子规格是一份100个
|
||||
if jxSku.SkuID == 6039382 {
|
||||
if bagMap[jxSku.SkuID] != 0 {
|
||||
if sum > 0 {
|
||||
if bagMap[jxSku.SkuID]*jxSku.Count <= sum+100 {
|
||||
jxSku.SalePrice = 1
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(1 * jxSku.Count)
|
||||
} else {
|
||||
jxSku2 := *jxSku
|
||||
jxSku2.SalePrice = jxSku.SalePrice
|
||||
jxSku2.Count = int(int64(jxSku.Count) - utils.Float64TwoInt64(math.Ceil(utils.Int2Float64(sum)/100)))
|
||||
jxSku.SalePrice = 1
|
||||
jxSku.Count = int(utils.Float64TwoInt64(math.Ceil(utils.Int2Float64(sum) / 100)))
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, &jxSku2)
|
||||
outJxOrder.OrderPrice += jxSku.SalePrice * int64(jxSku.Count)
|
||||
outJxOrder.OrderPrice += jxSku2.SalePrice * int64(jxSku2.Count)
|
||||
}
|
||||
} else {
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||
}
|
||||
sum = sum - bagMap[jxSku.SkuID]*jxSku.Count
|
||||
}
|
||||
} else if jxSku.SkuID == 6039383 || jxSku.SkuID == 6039384 || jxSku.SkuID == 6039387 || jxSku.SkuID == 6039390 {
|
||||
if bagMap[jxSku.SkuID] != 0 {
|
||||
if sum > 0 {
|
||||
if bagMap[jxSku.SkuID]*jxSku.Count <= sum+200 {
|
||||
jxSku.SalePrice = 1
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(1 * jxSku.Count)
|
||||
} else {
|
||||
jxSku2 := *jxSku
|
||||
jxSku2.SalePrice = jxSku.SalePrice
|
||||
jxSku2.Count = int(int64(jxSku.Count) - utils.Float64TwoInt64(math.Ceil(utils.Int2Float64(sum)/200)))
|
||||
jxSku.SalePrice = 1
|
||||
jxSku.Count = int(utils.Float64TwoInt64(math.Ceil(utils.Int2Float64(sum) / 200)))
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, &jxSku2)
|
||||
outJxOrder.OrderPrice += jxSku.SalePrice * int64(jxSku.Count)
|
||||
outJxOrder.OrderPrice += jxSku2.SalePrice * int64(jxSku2.Count)
|
||||
}
|
||||
} else {
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||
}
|
||||
sum = sum - bagMap[jxSku.SkuID]*jxSku.Count
|
||||
}
|
||||
bagPriceCount(jxSku, outJxOrder, sum, 100)
|
||||
} else if jxSku.SkuID == 6039383 || jxSku.SkuID == 6039384 || jxSku.SkuID == 6039387 || jxSku.SkuID == 6039390 { //这些袋子是一份200个
|
||||
bagPriceCount(jxSku, outJxOrder, sum, 200)
|
||||
} else {
|
||||
outJxOrder.Skus = append(outJxOrder.Skus, jxSku)
|
||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||
@@ -612,6 +597,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
}
|
||||
}
|
||||
}
|
||||
//物料订单的配送费另算,所以排除了免得多算一次
|
||||
if fromStoreID == 0 {
|
||||
sort.Sort(JxSkuInfoList(outJxOrder.Skus))
|
||||
outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
|
||||
@@ -630,8 +616,11 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
if err = err2; err != nil {
|
||||
return nil, nil, fmt.Errorf("fromStoreID有误,[%v]", fromStoreID)
|
||||
}
|
||||
//要求配送人姓名填门店名
|
||||
deliveryAddress.ConsigneeName = storeDetail2.Name
|
||||
outJxOrder.FromStoreID = fromStoreID
|
||||
///物料订单的配送费计算,注释的是分包之后计算配送费,但后来还是直接算不分包之前的总配送费
|
||||
///规则为: 配送费用规则。起价5元(含2kg),之后每kg+2元,不足1kg按1kg计算。
|
||||
// if outJxOrder.Weight > 5000 {
|
||||
// _, freightPrice, err := tryToSplitMatterOrder(outJxOrder)
|
||||
// if err != nil {
|
||||
@@ -666,6 +655,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
||||
return outJxOrder, deliveryAddress, err
|
||||
}
|
||||
|
||||
//根据销量限制门店申请袋子数,现暂不使用该判断,万一以后要用就先没删
|
||||
func matterSkusLimited(skus []*JxSkuInfo, storeID int) (err error) {
|
||||
result, err := orderman.GetMatterStoreOrderCount(nil, storeID)
|
||||
sum := 0
|
||||
@@ -775,6 +765,7 @@ func AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList
|
||||
|
||||
func PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
|
||||
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "")
|
||||
//如果是物料订单则直接进行京东物流的发单,并且状态直接变为配送中
|
||||
err = orderSolutionForWuLiao(order)
|
||||
return err
|
||||
}
|
||||
@@ -853,11 +844,13 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
||||
}
|
||||
jxOrder.Skus = skus
|
||||
outOrders, _, _ := tryToSplitMatterOrder(jxOrder)
|
||||
//以下为仿照CreateOrder,改了一些参数
|
||||
for k, v := range outOrders {
|
||||
outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, v, order.AddressID, order.FromStoreID, order.UserID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//分包后的子订单ID默认是后面加两位(目前的规则),要改的话要注意取消订单那的判断
|
||||
outJxOrder.OrderID = utils.Str2Int64(order.VendorOrderID)*100 + int64(k+1)
|
||||
order2, err2 := jxOrder2GoodsOrder(jxcontext.AdminCtx, outJxOrder, deliveryAddress, order.UserID)
|
||||
if err = err2; err == nil {
|
||||
@@ -1283,6 +1276,10 @@ func tryToSplitMatterOrder(jxOrder *JxOrderInfo) (outOrders []*JxOrderInfo, frei
|
||||
weightList []*JxSkuInfo2
|
||||
flag = true
|
||||
)
|
||||
//我的思路为把所有商品依次按重量销量从大到小排列,然后第一个包尽量分出5kg,后面分出3kg
|
||||
//但是我把JxSkuInfo放进list的时候,想根据一个参数GroupSign判断是否这个商品已经分出去了
|
||||
//但是在list中同一个商品似乎放进去的地址是一样的,我改了一个商品的GroupSign,所有的都变了,所以只有分出一个JxSkuInfo2去弄。。
|
||||
//要做优化的话更好
|
||||
for _, v := range skus {
|
||||
for i := 0; i < v.Count; i++ {
|
||||
var sku2 = &JxSkuInfo2{}
|
||||
|
||||
Reference in New Issue
Block a user