进货订单调整
This commit is contained in:
@@ -26,6 +26,12 @@ const (
|
|||||||
EarningTypePoints = 2 //扣点模式
|
EarningTypePoints = 2 //扣点模式
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
OrderTypeNormal = 0 //普通订单
|
||||||
|
OrderTypeMatter = 1 //物料订单
|
||||||
|
OrderTypeSupplyGoods = 2 //进货订单
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
PayStatusName = map[int]string{
|
PayStatusName = map[int]string{
|
||||||
PayStatusNo: "待支付",
|
PayStatusNo: "待支付",
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -110,6 +109,7 @@ type JxOrderInfo struct {
|
|||||||
Weight int `json:"weight"`
|
Weight int `json:"weight"`
|
||||||
FromStoreID int `json:"fromStoreID"`
|
FromStoreID int `json:"fromStoreID"`
|
||||||
EarningType int `json:"earningType"`
|
EarningType int `json:"earningType"`
|
||||||
|
OrderType int `json:"orderType"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type DeliveryTimeItem struct {
|
type DeliveryTimeItem struct {
|
||||||
@@ -217,7 +217,7 @@ func GetMyOrderCountInfo(ctx *jxcontext.Context, fromDate, toDate time.Time, sta
|
|||||||
}
|
}
|
||||||
|
|
||||||
//fromStoreID 为0 表示非物料订单(京西商城订单等)
|
//fromStoreID 为0 表示非物料订单(京西商城订单等)
|
||||||
//fromStoreID 为 门店ID ,表示是物料订单,fromStoreID表示是哪个门店申请的物料
|
//fromStoreID 为 门店ID ,表示是物料订单,fromStoreID表示是哪个门店申请的物料,或者进货方门店
|
||||||
//fromStoreID 为-1 表示也是物料订单,但是不是门店申请,是个人申请的
|
//fromStoreID 为-1 表示也是物料订单,但是不是门店申请,是个人申请的
|
||||||
//fromStoreID 在后面 generateOrder中有用
|
//fromStoreID 在后面 generateOrder中有用
|
||||||
func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int, fromStoreID int, IsDeliverySelf bool) (outJxOrder *JxOrderInfo, err error) {
|
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
|
order.StatusTime = *orderPay.PayFinishedAt
|
||||||
err = callNewOrder(order)
|
err = callNewOrder(order)
|
||||||
//如果是物料的订单,直接到拣货完成,配送中的状态
|
//如果是物料的订单,直接到拣货完成,配送中的状态
|
||||||
if order.FromStoreID != 0 {
|
if order.OrderType != model.OrderTypeNormal {
|
||||||
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
netprinter.PrintOrderByOrder(jxcontext.AdminCtx, order)
|
||||||
PickupGoods(order, false, "jxadmin")
|
PickupGoods(order, false, "jxadmin")
|
||||||
}
|
}
|
||||||
@@ -506,10 +506,6 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
return nil, nil, fmt.Errorf("预订单只能预定当天或第二天")
|
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 := *jxOrder
|
||||||
outJxOrder2.Skus = nil
|
outJxOrder2.Skus = nil
|
||||||
outJxOrder2.OrderPrice = 0
|
outJxOrder2.OrderPrice = 0
|
||||||
@@ -546,7 +542,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
}
|
}
|
||||||
skuMap := make(map[int]*model.SkuAndName)
|
skuMap := make(map[int]*model.SkuAndName)
|
||||||
for _, v := range skuList {
|
for _, v := range skuList {
|
||||||
if fromStoreID != 0 {
|
if jxOrder.OrderType == model.OrderTypeMatter {
|
||||||
if v.EclpID == "" {
|
if v.EclpID == "" {
|
||||||
return nil, nil, fmt.Errorf("此商品物料编码为空,请联系管理员!skuID:[%v]", v.ID)
|
return nil, nil, fmt.Errorf("此商品物料编码为空,请联系管理员!skuID:[%v]", v.ID)
|
||||||
}
|
}
|
||||||
@@ -558,7 +554,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
sum int //申请物料的店的最近销量,以下会根据销量计算具体袋子的价格
|
sum int //申请物料的店的最近销量,以下会根据销量计算具体袋子的价格
|
||||||
flag = false //新店袋子拆分当个参数
|
flag = false //新店袋子拆分当个参数
|
||||||
)
|
)
|
||||||
if fromStoreID != 0 && fromStoreID != -1 {
|
if jxOrder.OrderType == model.OrderTypeMatter && fromStoreID != -1 {
|
||||||
result, _ = orderman.GetMatterStoreOrderCount(nil, fromStoreID)
|
result, _ = orderman.GetMatterStoreOrderCount(nil, fromStoreID)
|
||||||
sum = result.Count
|
sum = result.Count
|
||||||
}
|
}
|
||||||
@@ -570,7 +566,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
}
|
}
|
||||||
for _, v := range skus {
|
for _, v := range skus {
|
||||||
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
|
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
|
||||||
if fromStoreID != 0 {
|
if jxOrder.OrderType == model.OrderTypeMatter {
|
||||||
result2, _ := api.JdEclpAPI.QueryStock(storeSkuBind.EclpID)
|
result2, _ := api.JdEclpAPI.QueryStock(storeSkuBind.EclpID)
|
||||||
if len(result2) > 0 {
|
if len(result2) > 0 {
|
||||||
if result2[0].UsableNum < v.Count {
|
if result2[0].UsableNum < v.Count {
|
||||||
@@ -608,7 +604,7 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if jxSku != nil {
|
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.Skus = append(outJxOrder.Skus, jxSku)
|
||||||
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
outJxOrder.OrderPrice += int64(jxSku.Count) * jxSku.SalePrice
|
||||||
} else { //以下else为物料订单袋子金额和数量处理
|
} else { //以下else为物料订单袋子金额和数量处理
|
||||||
@@ -707,15 +703,14 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//物料订单的配送费另算,所以排除了免得多算一次
|
// if fromStoreID == 0 {
|
||||||
if fromStoreID == 0 {
|
// sort.Sort(JxSkuInfoList(outJxOrder.Skus))
|
||||||
sort.Sort(JxSkuInfoList(outJxOrder.Skus))
|
// outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "",
|
||||||
// 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),
|
// model.CoordinateTypeMars, outJxOrder.Weight, checkTime)
|
||||||
// model.CoordinateTypeMars, outJxOrder.Weight, checkTime)
|
//TODO 2020-08-06 配送费固定5元
|
||||||
//TODO 2020-08-06 配送费固定5元
|
outJxOrder.FreightPrice = 500
|
||||||
outJxOrder.FreightPrice = 500
|
// }
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
outJxOrder.FreightPrice = 0
|
outJxOrder.FreightPrice = 0
|
||||||
}
|
}
|
||||||
@@ -725,28 +720,24 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
if err = err2; err != nil {
|
if err = err2; err != nil {
|
||||||
return nil, nil, fmt.Errorf("fromStoreID有误,[%v]", fromStoreID)
|
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 {
|
if fromStoreID != -1 {
|
||||||
deliveryAddress.ConsigneeName = storeDetail2.Name
|
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 {
|
} else {
|
||||||
if outJxOrder.FreightPrice > specialFreightPrice {
|
if outJxOrder.FreightPrice > specialFreightPrice {
|
||||||
outJxOrder.FreightPrice = specialFreightPrice
|
outJxOrder.FreightPrice = specialFreightPrice
|
||||||
@@ -827,6 +818,7 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
|
|||||||
DeliveryType: model.OrderDeliveryTypeStoreSelf,
|
DeliveryType: model.OrderDeliveryTypeStoreSelf,
|
||||||
StatusTime: time.Now(),
|
StatusTime: time.Now(),
|
||||||
EarningType: jxOrder.EarningType,
|
EarningType: jxOrder.EarningType,
|
||||||
|
OrderType: jxOrder.OrderType,
|
||||||
}
|
}
|
||||||
if userID == "" {
|
if userID == "" {
|
||||||
order.UserID = ctx.GetUserID()
|
order.UserID = ctx.GetUserID()
|
||||||
@@ -857,10 +849,12 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
|
|||||||
order.ActualPayPrice = order.TotalShopMoney
|
order.ActualPayPrice = order.TotalShopMoney
|
||||||
if jxOrder.FromStoreID != 0 {
|
if jxOrder.FromStoreID != 0 {
|
||||||
order.FromStoreID = jxOrder.FromStoreID
|
order.FromStoreID = jxOrder.FromStoreID
|
||||||
order.WaybillVendorID = model.VendorIDJDWL
|
|
||||||
order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled
|
order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled
|
||||||
order.ConsigneeAddress = deliveryAddress.Address
|
|
||||||
order.Flag = 1
|
order.Flag = 1
|
||||||
|
if jxOrder.OrderType == model.OrderTypeMatter {
|
||||||
|
order.WaybillVendorID = model.VendorIDJDWL
|
||||||
|
order.ConsigneeAddress = deliveryAddress.Address
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//如果是自提单就设置
|
//如果是自提单就设置
|
||||||
if IsDeliverySelf {
|
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) {
|
func PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) {
|
||||||
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "")
|
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "")
|
||||||
//如果是物料订单则直接进行京东物流的发单,并且状态直接变为配送中
|
//如果是物料订单则直接进行京东物流的发单,并且状态直接变为配送中
|
||||||
|
//如果是进货的订单,直接变为配送中
|
||||||
err = orderSolutionForWuLiao(order)
|
err = orderSolutionForWuLiao(order)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
||||||
if order.FromStoreID != 0 {
|
err = changeOrderStatus(order.VendorOrderID, model.OrderStatusDelivering, "")
|
||||||
|
if order.OrderType == model.OrderTypeMatter {
|
||||||
var (
|
var (
|
||||||
db = dao.GetDB()
|
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)
|
goods, err := dao.QueryOrders(db, order.VendorOrderID, -1, []int{model.VendorIDJX}, -1, utils.ZeroTimeValue, utils.ZeroTimeValue)
|
||||||
if err != nil || len(goods) == 0 {
|
if err != nil || len(goods) == 0 {
|
||||||
return err
|
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) {
|
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 order.EclpOutID != "" {
|
||||||
//表示是京西的物料订单的子订单(拆分后的订单)
|
//表示是京西的物料订单的子订单(拆分后的订单)
|
||||||
if len(order.VendorOrderID) == 16 && order.VendorID == model.VendorIDJX {
|
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.Skus = skus
|
||||||
jxOrder.Weight = weight
|
jxOrder.Weight = weight
|
||||||
|
jxOrder.OrderType = model.OrderTypeMatter
|
||||||
return jxOrder
|
return jxOrder
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user