From 75662d58f61212f554f77fa2580e5bea4c296711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 6 Aug 2020 16:39:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E8=B4=A7=E8=AE=A2=E5=8D=95=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/order.go | 6 ++ business/partner/purchase/jx/localjx/order.go | 82 +++++++++---------- 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/business/model/order.go b/business/model/order.go index 08b0b0fa2..c0a4d6b71 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -26,6 +26,12 @@ const ( EarningTypePoints = 2 //扣点模式 ) +const ( + OrderTypeNormal = 0 //普通订单 + OrderTypeMatter = 1 //物料订单 + OrderTypeSupplyGoods = 2 //进货订单 +) + var ( PayStatusName = map[int]string{ PayStatusNo: "待支付", diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 74d531b94..abb7f34fc 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -5,7 +5,6 @@ import ( "fmt" "math" "regexp" - "sort" "strings" "time" @@ -110,6 +109,7 @@ type JxOrderInfo struct { Weight int `json:"weight"` FromStoreID int `json:"fromStoreID"` EarningType int `json:"earningType"` + OrderType int `json:"orderType"` } type DeliveryTimeItem struct { @@ -217,7 +217,7 @@ func GetMyOrderCountInfo(ctx *jxcontext.Context, fromDate, toDate time.Time, sta } //fromStoreID 为0 表示非物料订单(京西商城订单等) -//fromStoreID 为 门店ID ,表示是物料订单,fromStoreID表示是哪个门店申请的物料 +//fromStoreID 为 门店ID ,表示是物料订单,fromStoreID表示是哪个门店申请的物料,或者进货方门店 //fromStoreID 为-1 表示也是物料订单,但是不是门店申请,是个人申请的 //fromStoreID 在后面 generateOrder中有用 func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int, fromStoreID int, IsDeliverySelf bool) (outJxOrder *JxOrderInfo, err error) { @@ -370,7 +370,7 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) { order.StatusTime = *orderPay.PayFinishedAt err = callNewOrder(order) //如果是物料的订单,直接到拣货完成,配送中的状态 - if order.FromStoreID != 0 { + if order.OrderType != model.OrderTypeNormal { netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order) PickupGoods(order, false, "jxadmin") } @@ -506,10 +506,6 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 return nil, nil, fmt.Errorf("预订单只能预定当天或第二天") } } - // if !isTimeInOpTime(storeDetail.OpenTime1, storeDetail.CloseTime1, storeDetail.OpenTime2, storeDetail.CloseTime2, checkTime) { - // return nil, nil, fmt.Errorf("门店:%s不在营业时间范围", storeDetail.Name) - // } - outJxOrder2 := *jxOrder outJxOrder2.Skus = nil outJxOrder2.OrderPrice = 0 @@ -546,7 +542,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 } skuMap := make(map[int]*model.SkuAndName) for _, v := range skuList { - if fromStoreID != 0 { + if jxOrder.OrderType == model.OrderTypeMatter { if v.EclpID == "" { return nil, nil, fmt.Errorf("此商品物料编码为空,请联系管理员!skuID:[%v]", v.ID) } @@ -558,7 +554,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 sum int //申请物料的店的最近销量,以下会根据销量计算具体袋子的价格 flag = false //新店袋子拆分当个参数 ) - if fromStoreID != 0 && fromStoreID != -1 { + if jxOrder.OrderType == model.OrderTypeMatter && fromStoreID != -1 { result, _ = orderman.GetMatterStoreOrderCount(nil, fromStoreID) sum = result.Count } @@ -570,7 +566,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 } for _, v := range skus { if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil { - if fromStoreID != 0 { + if jxOrder.OrderType == model.OrderTypeMatter { result2, _ := api.JdEclpAPI.QueryStock(storeSkuBind.EclpID) if len(result2) > 0 { if result2[0].UsableNum < v.Count { @@ -608,7 +604,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 } } if jxSku != nil { - if fromStoreID == 0 || fromStoreID == -1 { + if jxOrder.OrderType != model.OrderTypeMatter || (jxOrder.OrderType == model.OrderTypeMatter && fromStoreID == -1) { outJxOrder.Skus = append(outJxOrder.Skus, jxSku) outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice } else { //以下else为物料订单袋子金额和数量处理 @@ -707,15 +703,14 @@ 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, "", - // jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), - // model.CoordinateTypeMars, outJxOrder.Weight, checkTime) - //TODO 2020-08-06 配送费固定5元 - outJxOrder.FreightPrice = 500 - } + // if fromStoreID == 0 { + // sort.Sort(JxSkuInfoList(outJxOrder.Skus)) + // outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", + // jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), + // model.CoordinateTypeMars, outJxOrder.Weight, checkTime) + //TODO 2020-08-06 配送费固定5元 + outJxOrder.FreightPrice = 500 + // } } else { outJxOrder.FreightPrice = 0 } @@ -725,28 +720,24 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 if err = err2; err != nil { return nil, nil, fmt.Errorf("fromStoreID有误,[%v]", fromStoreID) } + outJxOrder.FromStoreID = fromStoreID + if jxOrder.OrderType == model.OrderTypeMatter { + //TODO 修改配送费规则,2020-04-28 + //3kg 5元,每多1kg加2元 + //配送费要按分包规则计算 + if outJxOrder.Weight <= 3000 { + outJxOrder.FreightPrice = 500 + } else if outJxOrder.Weight > 3000 && outJxOrder.Weight <= splitMatterOrderMinWeight { + outJxOrder.FreightPrice = utils.Float64TwoInt64(500 + math.Ceil((utils.Int2Float64(outJxOrder.Weight)-3000)/1000)*200) + } else { + _, freightPrice, _ := tryToSplitMatterOrder(jxOrder) + outJxOrder.FreightPrice = freightPrice + } + } //要求配送人姓名填门店名 if fromStoreID != -1 { deliveryAddress.ConsigneeName = storeDetail2.Name } - outJxOrder.FromStoreID = fromStoreID - //TODO 修改配送费规则,2020-04-28 - //3kg 5元,每多1kg加2元 - //配送费要按分包规则计算 - if outJxOrder.Weight <= 3000 { - outJxOrder.FreightPrice = 500 - } else if outJxOrder.Weight > 3000 && outJxOrder.Weight <= splitMatterOrderMinWeight { - outJxOrder.FreightPrice = utils.Float64TwoInt64(500 + math.Ceil((utils.Int2Float64(outJxOrder.Weight)-3000)/1000)*200) - } else { - _, freightPrice, _ := tryToSplitMatterOrder(jxOrder) - outJxOrder.FreightPrice = freightPrice - } - ///规则为: 配送费用规则。起价5元(含2kg),之后每kg+2元,不足1kg按1kg计算。 - // if outJxOrder.Weight <= 2000 { - // outJxOrder.FreightPrice = 500 - // } else { - // outJxOrder.FreightPrice = utils.Float64TwoInt64(500 + math.Ceil((utils.Int2Float64(outJxOrder.Weight)-2000)/1000)*200) - // } } else { if outJxOrder.FreightPrice > specialFreightPrice { outJxOrder.FreightPrice = specialFreightPrice @@ -827,6 +818,7 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd DeliveryType: model.OrderDeliveryTypeStoreSelf, StatusTime: time.Now(), EarningType: jxOrder.EarningType, + OrderType: jxOrder.OrderType, } if userID == "" { order.UserID = ctx.GetUserID() @@ -857,10 +849,12 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd order.ActualPayPrice = order.TotalShopMoney if jxOrder.FromStoreID != 0 { order.FromStoreID = jxOrder.FromStoreID - order.WaybillVendorID = model.VendorIDJDWL order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled - order.ConsigneeAddress = deliveryAddress.Address order.Flag = 1 + if jxOrder.OrderType == model.OrderTypeMatter { + order.WaybillVendorID = model.VendorIDJDWL + order.ConsigneeAddress = deliveryAddress.Address + } } //如果是自提单就设置 if IsDeliverySelf { @@ -886,16 +880,17 @@ 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 } func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) { - if order.FromStoreID != 0 { + err = changeOrderStatus(order.VendorOrderID, model.OrderStatusDelivering, "") + if order.OrderType == model.OrderTypeMatter { var ( db = dao.GetDB() ) - err = changeOrderStatus(order.VendorOrderID, model.OrderStatusDelivering, "") goods, err := dao.QueryOrders(db, order.VendorOrderID, -1, []int{model.VendorIDJX}, -1, utils.ZeroTimeValue, utils.ZeroTimeValue) if err != nil || len(goods) == 0 { return err @@ -1075,7 +1070,7 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) } func CancelMatterOrder(db *dao.DaoDB, order *model.GoodsOrder, reason string) (err error) { - if order.FromStoreID != 0 { + if order.OrderType == model.OrderTypeMatter { if order.EclpOutID != "" { //表示是京西的物料订单的子订单(拆分后的订单) if len(order.VendorOrderID) == 16 && order.VendorID == model.VendorIDJX { @@ -1789,5 +1784,6 @@ func buildJxOrderInfo(order *model.GoodsOrder, orderSkus []*model.OrderSku) (jxO } jxOrder.Skus = skus jxOrder.Weight = weight + jxOrder.OrderType = model.OrderTypeMatter return jxOrder }