物料订单重发接口
This commit is contained in:
@@ -1244,3 +1244,18 @@ func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, er
|
|||||||
err = GetRows(db, &waybills, sql, sqlParams)
|
err = GetRows(db, &waybills, sql, sqlParams)
|
||||||
return waybills, err
|
return waybills, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.GoodsOrder, err error) {
|
||||||
|
sql := `SELECT *
|
||||||
|
FROM goods_order
|
||||||
|
WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ?
|
||||||
|
AND vendor_id = ?
|
||||||
|
ORDER BY vendor_order_id DESC
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
vendorOrderID + "0%", vendorOrderID + "1%",
|
||||||
|
model.VendorIDJX,
|
||||||
|
}
|
||||||
|
err = GetRows(db, &goods, sql, sqlParams)
|
||||||
|
return goods, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ const (
|
|||||||
|
|
||||||
wxAppID = "wx4b5930c13f8b1170"
|
wxAppID = "wx4b5930c13f8b1170"
|
||||||
|
|
||||||
autoCancelOrderReason = "支付超时,系统自动取消!"
|
autoCancelOrderReason = "支付超时,系统自动取消!"
|
||||||
|
cancelMatterOrderReason = "失败重发!"
|
||||||
)
|
)
|
||||||
|
|
||||||
type JxSkuInfo struct {
|
type JxSkuInfo struct {
|
||||||
@@ -867,23 +868,7 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
|||||||
}
|
}
|
||||||
dao.CreateEntity(db, waybill)
|
dao.CreateEntity(db, waybill)
|
||||||
} else { //如果重量超过5kg则需要进行拆单分包,商品分包规则。最后一个包不超过5kg,其他包不超过3kg
|
} else { //如果重量超过5kg则需要进行拆单分包,商品分包规则。最后一个包不超过5kg,其他包不超过3kg
|
||||||
jxOrder := &JxOrderInfo{}
|
outOrders, _, _ := tryToSplitMatterOrder(buildJxOrderInfo(order, orderSkus))
|
||||||
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)
|
|
||||||
//以下为仿照CreateOrder,改了一些参数
|
//以下为仿照CreateOrder,改了一些参数
|
||||||
for k, v := range outOrders {
|
for k, v := range outOrders {
|
||||||
outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, v, order.AddressID, order.FromStoreID, order.UserID)
|
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)
|
_, err = api.JdEclpAPI.CancelOrder(order.EclpOutID)
|
||||||
} else {
|
} else {
|
||||||
var goodsList []*model.GoodsOrder
|
goodsList, err := dao.GetMatterChildOrders(db, order.VendorOrderID)
|
||||||
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)
|
|
||||||
if err == nil && len(goodsList) > 0 {
|
if err == nil && len(goodsList) > 0 {
|
||||||
for _, v := range goodsList {
|
for _, v := range goodsList {
|
||||||
_, err = api.JdEclpAPI.CancelOrder(v.EclpOutID)
|
_, 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
|
||||||
|
}
|
||||||
|
|||||||
@@ -187,3 +187,17 @@ func (c *JxOrderController) RefreshAllMatterOrderStatus() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 重发物料订单
|
||||||
|
// @Description 重发物料订单
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param vendorOrderID formData string true "订单ID"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /SendFailedMatterOrder [post]
|
||||||
|
func (c *JxOrderController) SendFailedMatterOrder() {
|
||||||
|
c.callSendFailedMatterOrder(func(params *tJxorderSendFailedMatterOrderParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
err = localjx.SendFailedMatterOrder(params.Ctx, params.VendorOrderID)
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -718,6 +718,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "SendFailedMatterOrder",
|
||||||
|
Router: `/SendFailedMatterOrder`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "JxMsg",
|
Method: "JxMsg",
|
||||||
|
|||||||
Reference in New Issue
Block a user