@@ -45,7 +45,8 @@ const (
wxAppID = "wx4b5930c13f8b1170"
autoCancelOrderReason = "支付超时,系统自动取消!"
autoCancelOrderReason = "支付超时,系统自动取消!"
cancelMatterOrderReason = "失败重发!"
)
type JxSkuInfo struct {
@@ -867,23 +868,7 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
}
dao . CreateEntity ( db , waybill )
} else { //如果重量超过5kg则需要进行拆单分包, 商品分包规则。最后一个包不超过5kg,其他包不超过3kg
jx Order := & JxOrderInfo { }
jxOrder . StoreID = order . StoreID
weight := 0
var skus [ ] * JxSkuInfo
for _ , v := range orderSkus {
weight += v . Weight * v . Count
sku := & JxSkuInfo { }
sku . SkuID = v . SkuID
sku . SalePrice = v . SalePrice
sku . Name = v . SkuName
sku . Weight = v . Weight
sku . Count = v . Count
skus = append ( skus , sku )
}
jxOrder . Skus = skus
jxOrder . Weight = weight
outOrders , _ , _ := tryToSplitMatterOrder ( jxOrder )
out Orders , _ , _ := tryToSplitMatterOrder ( buildJxOrderInfo ( order , orderSkus ) )
//以下为仿照CreateOrder, 改了一些参数
for k , v := range outOrders {
outJxOrder , deliveryAddress , err := generateOrder ( jxcontext . AdminCtx , v , order . AddressID , order . FromStoreID , order . UserID )
@@ -981,10 +966,7 @@ func CancelMatterOrder(db *dao.DaoDB, order *model.GoodsOrder, reason string) (e
}
_ , err = api . JdEclpAPI . CancelOrder ( order . EclpOutID )
} else {
var goodsList [ ] * mo del . GoodsOrder
sql := "SELECT * FROM goods_order WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? AND vendor_id = ?"
sqlParams := [ ] interface { } { order . VendorOrderID + "0%" , order . VendorOrderID + "1%" , model . VendorIDJX }
err = dao . GetRows ( db , & goodsList , sql , sqlParams )
goodsList , err := dao . GetMatterChildOrders ( db , or der . VendorOrderID )
if err == nil && len ( goodsList ) > 0 {
for _ , v := range goodsList {
_ , err = api . JdEclpAPI . CancelOrder ( v . EclpOutID )
@@ -1552,3 +1534,89 @@ func checkMatterDeliveryAddress(deliveryAddress *dao.UserDeliveryAddressEx) {
}
}
}
func SendFailedMatterOrder ( ctx * jxcontext . Context , vendorOrderID string ) ( err error ) {
var (
db = dao . GetDB ( )
)
order , err := partner . CurOrderManager . LoadOrder ( vendorOrderID , model . VendorIDJX )
if err != nil {
return err
}
if order == nil || order . StoreID != model . MatterStoreID || order . FromStoreID == 0 {
return fmt . Errorf ( "只允许物料店重发物料订单调用此接口!" )
}
queryOrderStatus , err := api . JdEclpAPI . QueryOrderStatus ( order . EclpOutID )
if len ( queryOrderStatus . OrderStatusList ) > 0 {
if queryOrderStatus . OrderStatusList [ len ( queryOrderStatus . OrderStatusList ) - 1 ] . SoStatusCode == jdeclpapi . SoStatusCode10022 { //表示该订单在京东物流为暂停
if len ( order . VendorOrderID ) == 14 && order . EclpOutID != "" { //这是不分包的订单
_ , err = createMatterOrder ( buildJxOrderInfo ( order , order . Skus ) , order , int64 ( 00 ) )
err = CancelMatterOrder ( db , order , cancelMatterOrderReason )
for _ , v := range order . Skus {
cms . RefreshMatterStock ( jxcontext . AdminCtx , v . SkuID )
}
} else if len ( order . VendorOrderID ) == 14 && order . EclpOutID == "" { //这是分包的主订单
goodsList , err := dao . GetMatterChildOrders ( db , order . VendorOrderID )
if err != nil {
return err
}
if len ( goodsList ) > 0 {
for _ , v := range goodsList {
cOrder , err := partner . CurOrderManager . LoadOrder ( v . VendorOrderID , model . VendorIDJX )
if err != nil {
return err
}
suffix := utils . Str2Int64 ( cOrder . VendorOrderID [ len ( cOrder . VendorOrderID ) - 2 : ] ) + int64 ( len ( goodsList ) )
_ , err = createMatterOrder ( buildJxOrderInfo ( cOrder , cOrder . Skus ) , cOrder , suffix )
for _ , v := range cOrder . Skus {
cms . RefreshMatterStock ( jxcontext . AdminCtx , v . SkuID )
}
}
}
err = CancelMatterOrder ( db , order , cancelMatterOrderReason )
} else if len ( order . VendorOrderID ) == 16 && order . EclpOutID != "" { // 这是分包的子订单
return fmt . Errorf ( "请重发主订单!主订单号:[%v]" , order . VendorOrderID [ len ( order . VendorOrderID ) - 2 : ] )
}
} else {
return fmt . Errorf ( "只允许物流订单为暂停才能调用此接口!" )
}
}
return err
}
func createMatterOrder ( jxOrder * JxOrderInfo , order * model . GoodsOrder , newOrderIDSuffix int64 ) ( order2 * model . GoodsOrder , err error ) {
outJxOrder , deliveryAddress , err := generateOrder ( jxcontext . AdminCtx , jxOrder , order . AddressID , order . FromStoreID , order . UserID )
if err != nil {
return nil , err
}
outJxOrder . OrderID = utils . Str2Int64 ( order . VendorOrderID ) * 100 + newOrderIDSuffix
checkMatterDeliveryAddress ( deliveryAddress )
order2 , err2 := jxOrder2GoodsOrder ( jxcontext . AdminCtx , outJxOrder , deliveryAddress , order . UserID )
if err = err2 ; err == nil {
order2 . AddressID = order . AddressID
order2 . Status = model . OrderStatusDelivering
err = partner . CurOrderManager . OnOrderNew ( order2 , model . Order2Status ( order2 ) )
err = orderSolutionForWuLiao ( order2 )
}
return order2 , err
}
func buildJxOrderInfo ( order * model . GoodsOrder , orderSkus [ ] * model . OrderSku ) ( jxOrder * JxOrderInfo ) {
jxOrder = & JxOrderInfo { }
jxOrder . StoreID = order . StoreID
weight := 0
var skus [ ] * JxSkuInfo
for _ , v := range orderSkus {
weight += v . Weight * v . Count
sku := & JxSkuInfo { }
sku . SkuID = v . SkuID
sku . SalePrice = v . SalePrice
sku . Name = v . SkuName
sku . Weight = v . Weight
sku . Count = v . Count
skus = append ( skus , sku )
}
jxOrder . Skus = skus
jxOrder . Weight = weight
return jxOrder
}