添加GoodsOrder.DeliveryFeeFrom表示三方运单计算参考起始时间
重构平台添加小费及三方配送召唤逻辑
This commit is contained in:
@@ -68,10 +68,9 @@ type WatchOrderInfo struct {
|
|||||||
autoPickupTimeoutMinute int // 0表示禁用,1表示用缺省值time2AutoPickupMin,其它表示分钟数
|
autoPickupTimeoutMinute int // 0表示禁用,1表示用缺省值time2AutoPickupMin,其它表示分钟数
|
||||||
storeDeliveryType int
|
storeDeliveryType int
|
||||||
|
|
||||||
isDeliveryCompetition bool
|
isDeliveryCompetition bool
|
||||||
pmWaybillCreatedAt time.Time
|
isNeedCreate3rdWaybill bool
|
||||||
isNeedCreate3rdWaybill bool
|
watchWabillStartAt *time.Time
|
||||||
isAddWaybillTipDisabled bool
|
|
||||||
|
|
||||||
waybills map[int]*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
waybills map[int]*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
||||||
|
|
||||||
@@ -224,6 +223,8 @@ func init() {
|
|||||||
},
|
},
|
||||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 自配送商家使用
|
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 自配送商家使用
|
||||||
|
// 启动抢单TIMER
|
||||||
|
sch.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, savedOrderInfo.order.StatusTime)
|
||||||
return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
|
return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -431,23 +432,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
|||||||
err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
|
err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 只有购物平台的新运单消息才会启动抢单TIMER
|
// 购物平台的新运单消息会启动抢单TIMER
|
||||||
if model.IsWaybillPlatformOwn(bill) {
|
if model.IsWaybillPlatformOwn(bill) {
|
||||||
s.resetTimer(savedOrderInfo, bill, isPending)
|
s.resetTimer(savedOrderInfo, bill, isPending)
|
||||||
isFirst := utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt)
|
s.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, bill.StatusTime)
|
||||||
savedOrderInfo.pmWaybillCreatedAt = bill.StatusTime
|
|
||||||
savedOrderInfo.isAddWaybillTipDisabled = false
|
|
||||||
if isFirst {
|
|
||||||
duration := savedOrderInfo.pmWaybillCreatedAt.Add(minAddWaybillTipMinute * time.Minute).Sub(time.Now())
|
|
||||||
if duration <= 0 {
|
|
||||||
duration = 1 * time.Second
|
|
||||||
}
|
|
||||||
utils.AfterFuncWithRecover(duration, func() {
|
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
|
||||||
s.handleWaybillTip(savedOrderInfo)
|
|
||||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
isBillExist := s.updateBillsInfo(savedOrderInfo, bill)
|
isBillExist := s.updateBillsInfo(savedOrderInfo, bill)
|
||||||
@@ -471,7 +459,6 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
|||||||
s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
|
s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime)
|
||||||
|
|
||||||
if model.IsWaybillPlatformOwn(bill) {
|
if model.IsWaybillPlatformOwn(bill) {
|
||||||
savedOrderInfo.isAddWaybillTipDisabled = true
|
|
||||||
if bill.Status == model.WaybillStatusDelivering {
|
if bill.Status == model.WaybillStatusDelivering {
|
||||||
// 强制将订单状态置为配送中?
|
// 强制将订单状态置为配送中?
|
||||||
order.Status = model.OrderStatusDelivering
|
order.Status = model.OrderStatusDelivering
|
||||||
@@ -619,7 +606,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if maxDeliveryFee == 0 {
|
if maxDeliveryFee == 0 {
|
||||||
maxDeliveryFee = s.getMaxDeliveryFee(savedOrderInfo)
|
maxDeliveryFee = getMaxDeliveryFee(order)
|
||||||
}
|
}
|
||||||
if err = s.canOrderCreateWaybillNormally(order); err == nil {
|
if err = s.canOrderCreateWaybillNormally(order); err == nil {
|
||||||
if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 {
|
if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 {
|
||||||
@@ -1001,14 +988,9 @@ func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) getWaybillTip(savedOrderInfo *WatchOrderInfo) (tipFee int64) {
|
func getWaybillTip(order *model.GoodsOrder) (tipFee int64) {
|
||||||
order := savedOrderInfo.order
|
if !utils.IsPtrTimeZero(order.DeliveryFeeFrom) {
|
||||||
if order.Status == model.OrderStatusFinishedPickup &&
|
startTime := order.DeliveryFeeFrom.Add(minAddWaybillTipMinute * time.Minute)
|
||||||
!utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt) {
|
|
||||||
startTime := savedOrderInfo.pmWaybillCreatedAt.Add(minAddWaybillTipMinute * time.Minute)
|
|
||||||
// if order.DeliveryFlag&model.OrderDeliveryFlagMaskAutoPickup != 0 {
|
|
||||||
// startTime = startTime.Add(5 * time.Minute)
|
|
||||||
// }
|
|
||||||
timeGap1 := time.Now().Sub(startTime)
|
timeGap1 := time.Now().Sub(startTime)
|
||||||
if timeGap1 > 0 {
|
if timeGap1 > 0 {
|
||||||
timeGap := int64(timeGap1/(addWaybillTipGap*time.Minute)) + 1
|
timeGap := int64(timeGap1/(addWaybillTipGap*time.Minute)) + 1
|
||||||
@@ -1021,57 +1003,87 @@ func (s *DefScheduler) getWaybillTip(savedOrderInfo *WatchOrderInfo) (tipFee int
|
|||||||
return tipFee
|
return tipFee
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) getMaxDeliveryFee(savedOrderInfo *WatchOrderInfo) (maxDeliveryFee int64) {
|
func getMaxDeliveryFee(order *model.GoodsOrder) (maxDeliveryFee int64) {
|
||||||
maxDeliveryFee = baseWaybillFee + savedOrderInfo.order.DistanceFreightMoney + s.getWaybillTip(savedOrderInfo)
|
maxDeliveryFee = baseWaybillFee + order.DistanceFreightMoney + getWaybillTip(order)
|
||||||
return maxDeliveryFee
|
return maxDeliveryFee
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DefScheduler) handleWaybillTip(savedOrderInfo *WatchOrderInfo) {
|
func isNeedWatchWaybillTip(order *model.GoodsOrder) bool {
|
||||||
if savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore &&
|
return order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled == 0 && // 没有转出
|
||||||
savedOrderInfo.isDeliveryCompetition {
|
order.DeliveryType == model.OrderDeliveryTypePlatform && // 订单配送类型为平台
|
||||||
|
!utils.IsPtrTimeZero(order.DeliveryFeeFrom) // 已经有了开始计费时间
|
||||||
|
}
|
||||||
|
|
||||||
|
func isNeedWatch3rdWaybill(order *model.GoodsOrder) bool {
|
||||||
|
return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusDelivering) && // 订单状态
|
||||||
|
order.DeliveryFlag&model.OrderDeliveryFlagMaskScheduleDisabled == 0 && // 没有禁止调度
|
||||||
|
!model.IsOrderHaveWaybill(order) // 没有有效运单
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *DefScheduler) setWatchOrderWaybills(savedOrderInfo *WatchOrderInfo, duration time.Duration) {
|
||||||
|
if utils.IsPtrTimeZero(savedOrderInfo.watchWabillStartAt) {
|
||||||
|
savedOrderInfo.watchWabillStartAt = utils.Time2Pointer(time.Now())
|
||||||
|
utils.AfterFuncWithRecover(5*time.Minute, func() {
|
||||||
|
jxutils.CallMsgHandlerAsync(func() {
|
||||||
|
savedOrderInfo.watchWabillStartAt = nil
|
||||||
|
s.watchOrderWaybills(savedOrderInfo)
|
||||||
|
}, jxutils.ComposeUniversalOrderID(savedOrderInfo.order.VendorOrderID, savedOrderInfo.order.VendorID))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *DefScheduler) saveDeliveryFeeFromAndStartWatch(savedOrderInfo *WatchOrderInfo, statusTime time.Time) {
|
||||||
|
order := savedOrderInfo.order
|
||||||
|
if utils.IsPtrTimeZero(order.DeliveryFeeFrom) {
|
||||||
|
order.DeliveryFeeFrom = utils.Time2Pointer(statusTime)
|
||||||
|
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFeeFrom"})
|
||||||
|
}
|
||||||
|
duration := order.DeliveryFeeFrom.Add(minAddWaybillTipMinute * time.Minute).Sub(time.Now())
|
||||||
|
if duration <= 0 {
|
||||||
|
duration = 5 * time.Second
|
||||||
|
}
|
||||||
|
s.setWatchOrderWaybills(savedOrderInfo, duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *DefScheduler) watchOrderWaybills(savedOrderInfo *WatchOrderInfo) {
|
||||||
|
if savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && savedOrderInfo.isDeliveryCompetition ||
|
||||||
|
savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||||
order2 := savedOrderInfo.order
|
order2 := savedOrderInfo.order
|
||||||
if order, err := partner.CurOrderManager.LoadOrder(order2.VendorOrderID, order2.VendorID); err == nil {
|
if order, err := partner.CurOrderManager.LoadOrder(order2.VendorOrderID, order2.VendorID); err == nil {
|
||||||
savedOrderInfo.SetOrder(order)
|
savedOrderInfo.SetOrder(order)
|
||||||
if order.Status == model.OrderStatusFinishedPickup &&
|
if isNeedWatch3rdWaybill(order) {
|
||||||
order.DeliveryFlag&model.OrderDeliveryFlagMaskScheduleDisabled == 0 {
|
if isNeedWatchWaybillTip(order) {
|
||||||
if !utils.IsTimeZero(savedOrderInfo.pmWaybillCreatedAt) &&
|
if handler, ok := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).(partner.IAddWaybillTip); ok && handler != nil {
|
||||||
!savedOrderInfo.isAddWaybillTipDisabled {
|
var remark string
|
||||||
if tipFee := s.getWaybillTip(savedOrderInfo); tipFee > 0 {
|
tipFee := getWaybillTip(order)
|
||||||
if handler, ok := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).(partner.IAddWaybillTip); ok && handler != nil {
|
vendorStatus := fmt.Sprintf("设置小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee))
|
||||||
var remark string
|
if curTipFee, err := handler.GetWaybillTip(jxcontext.AdminCtx, order); err == nil {
|
||||||
vendorStatus := fmt.Sprintf("设置小费:%s", jxutils.IntPrice2StandardCurrencyString(tipFee))
|
tipFee2Add := tipFee - curTipFee
|
||||||
if curTipFee, err := handler.GetWaybillTip(jxcontext.AdminCtx, order); err == nil {
|
vendorStatus += fmt.Sprintf(", 本次添加:%s", jxutils.IntPrice2StandardCurrencyString(tipFee2Add))
|
||||||
tipFee2Add := tipFee - curTipFee
|
if tipFee2Add > 0 {
|
||||||
vendorStatus += fmt.Sprintf(", 本次添加:%s", jxutils.IntPrice2StandardCurrencyString(tipFee2Add))
|
err := handler.AddWaybillTip(jxcontext.AdminCtx, order, tipFee2Add)
|
||||||
if tipFee2Add > 0 {
|
if err == nil {
|
||||||
err := handler.AddWaybillTip(jxcontext.AdminCtx, order, tipFee2Add)
|
vendorStatus += "成功"
|
||||||
if err == nil {
|
order.WaybillTipMoney += tipFee2Add
|
||||||
vendorStatus += "成功"
|
partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney"})
|
||||||
order.WaybillTipMoney += tipFee2Add
|
|
||||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"WaybillTipMoney"})
|
|
||||||
} else {
|
|
||||||
vendorStatus += "失败"
|
|
||||||
remark = fmt.Sprint(err)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
vendorStatus += "空操作"
|
vendorStatus += "失败"
|
||||||
|
remark = fmt.Sprint(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vendorStatus += "失败"
|
vendorStatus += "空操作"
|
||||||
remark = fmt.Sprint(err)
|
|
||||||
}
|
}
|
||||||
partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark)
|
} else {
|
||||||
}
|
vendorStatus += "失败"
|
||||||
if savedOrderInfo.isNeedCreate3rdWaybill {
|
remark = fmt.Sprint(err)
|
||||||
s.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
|
|
||||||
}
|
}
|
||||||
|
partner.CurOrderManager.OnOrderMsg(order, vendorStatus, remark)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
utils.AfterFuncWithRecover(5*time.Minute, func() {
|
if savedOrderInfo.isNeedCreate3rdWaybill {
|
||||||
jxutils.CallMsgHandlerAsync(func() {
|
s.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
|
||||||
s.handleWaybillTip(savedOrderInfo)
|
}
|
||||||
}, jxutils.ComposeUniversalOrderID(order.VendorOrderID, order.VendorID))
|
s.setWatchOrderWaybills(savedOrderInfo, 5*time.Minute)
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,55 +14,56 @@ type ModelTimeInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GoodsOrder struct {
|
type GoodsOrder struct {
|
||||||
ID int64 `orm:"column(id)" json:"id"`
|
ID int64 `orm:"column(id)" json:"id"`
|
||||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
|
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
|
||||||
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"`
|
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"`
|
||||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
|
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"`
|
||||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||||
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
|
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
|
||||||
StoreName string `orm:"size(64)" json:"storeName"`
|
StoreName string `orm:"size(64)" json:"storeName"`
|
||||||
ShopPrice int64 `json:"shopPrice"` // 京西价
|
ShopPrice int64 `json:"shopPrice"` // 京西价
|
||||||
VendorPrice int64 `json:"vendorPrice"` // 平台价
|
VendorPrice int64 `json:"vendorPrice"` // 平台价
|
||||||
SalePrice int64 `json:"salePrice"` // 售卖价
|
SalePrice int64 `json:"salePrice"` // 售卖价
|
||||||
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
||||||
TotalShopMoney int64 `json:"totalShopMoney"` // 应结金额-第三方平台结算给京西的金额(包括了所有的补贴,扣除)
|
TotalShopMoney int64 `json:"totalShopMoney"` // 应结金额-第三方平台结算给京西的金额(包括了所有的补贴,扣除)
|
||||||
DiscountMoney int64 `json:"discountMoney"` // 订单总优惠金额
|
DiscountMoney int64 `json:"discountMoney"` // 订单总优惠金额
|
||||||
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
||||||
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
DistanceFreightMoney int64 `json:"distanceFreightMoney"` // 商户承担的远距离配送费(当前只有京东到家有值)
|
||||||
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
WaybillTipMoney int64 `json:"waybillTipMoney"` // 京西加的平台配送小费
|
||||||
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
|
EarningPrice int64 `json:"earningPrice"` // 结算给门店老板的钱(未扣除可能的三方配送费)
|
||||||
Weight int `json:"weight"` // 单位为克
|
Weight int `json:"weight"` // 单位为克
|
||||||
VendorUserID string `orm:"column(vendor_user_id);size(48)" json:"vendorUserID"`
|
VendorUserID string `orm:"column(vendor_user_id);size(48)" json:"vendorUserID"`
|
||||||
UserID string `orm:"column(user_id);size(48)" json:"userID"`
|
UserID string `orm:"column(user_id);size(48)" json:"userID"`
|
||||||
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
||||||
ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"`
|
ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"`
|
||||||
ConsigneeMobile2 string `orm:"size(32)" json:"consigneeMobile2"`
|
ConsigneeMobile2 string `orm:"size(32)" json:"consigneeMobile2"`
|
||||||
ConsigneeAddress string `orm:"size(255)" json:"consigneeAddress"`
|
ConsigneeAddress string `orm:"size(255)" json:"consigneeAddress"`
|
||||||
CoordinateType int `json:"coordinateType"`
|
CoordinateType int `json:"coordinateType"`
|
||||||
ConsigneeLng int `json:"consigneeLng"` // 坐标 * (10的六次方)
|
ConsigneeLng int `json:"consigneeLng"` // 坐标 * (10的六次方)
|
||||||
ConsigneeLat int `json:"consigneeLat"` // 坐标 * (10的六次方)
|
ConsigneeLat int `json:"consigneeLat"` // 坐标 * (10的六次方)
|
||||||
SkuCount int `json:"skuCount"` // 商品类别数量,即有多少种商品(注意在某些情况下,相同SKU的商品由于售价不同,也会当成不同商品在这个值里)
|
SkuCount int `json:"skuCount"` // 商品类别数量,即有多少种商品(注意在某些情况下,相同SKU的商品由于售价不同,也会当成不同商品在这个值里)
|
||||||
GoodsCount int `json:"goodsCount"` // 商品个数
|
GoodsCount int `json:"goodsCount"` // 商品个数
|
||||||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||||
VendorStatus string `orm:"size(255)" json:"vendorStatus"`
|
VendorStatus string `orm:"size(255)" json:"vendorStatus"`
|
||||||
LockStatus int `json:"lockStatus"`
|
LockStatus int `json:"lockStatus"`
|
||||||
LockStatusTime time.Time `orm:"type(datetime);null" json:"lockStatusTime"` // last lock status time
|
LockStatusTime time.Time `orm:"type(datetime);null" json:"lockStatusTime"` // last lock status time
|
||||||
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
||||||
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
||||||
BusinessType int `json:"businessType"`
|
BusinessType int `json:"businessType"`
|
||||||
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
|
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
|
||||||
CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请,不为null表示用户正在取消申请
|
CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请,不为null表示用户正在取消申请
|
||||||
DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送
|
DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送
|
||||||
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"`
|
VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"`
|
||||||
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
|
WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排
|
||||||
AdjustCount int8 `json:"adjustCount"` // 调整单(次数)
|
AdjustCount int8 `json:"adjustCount"` // 调整单(次数)
|
||||||
DeliveryFlag int8 `json:"deliveryFlag"` // 第1位为1表示禁止调度器调度三方配送
|
DeliveryFlag int8 `json:"deliveryFlag"` // 第1位为1表示禁止调度器调度三方配送
|
||||||
DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
||||||
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间)
|
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间)
|
||||||
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"`
|
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"`
|
||||||
StatusTime time.Time `orm:"type(datetime)" json:"statusTime"` // last status time
|
StatusTime time.Time `orm:"type(datetime)" json:"statusTime"` // last status time
|
||||||
PickDeadline time.Time `orm:"type(datetime);null" json:"pickDeadline"`
|
PickDeadline time.Time `orm:"type(datetime);null" json:"pickDeadline"`
|
||||||
|
DeliveryFeeFrom *time.Time `orm:"type(datetime);null" json:"deliveryFeeFrom,omitempty"` // 三方配置费计算的开始基准时间
|
||||||
ModelTimeInfo `json:"-"`
|
ModelTimeInfo `json:"-"`
|
||||||
Flag int `json:"flag"` //非运单调整相关的其它状态
|
Flag int `json:"flag"` //非运单调整相关的其它状态
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user