From c1811a33dc0fa1bc6a04c6d2b22761dad047d67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 24 Mar 2020 10:33:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E8=AE=A2=E5=8D=95=E9=87=8D?= =?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/dao_order.go | 15 +++ business/partner/purchase/jx/localjx/order.go | 112 ++++++++++++++---- controllers/jx_order2.go | 14 +++ routers/commentsRouter_controllers.go | 9 ++ 4 files changed, 128 insertions(+), 22 deletions(-) diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index a9583766d..c91a89b55 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1244,3 +1244,18 @@ func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, er err = GetRows(db, &waybills, sql, sqlParams) 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 +} diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 2e0cc0538..1d0c5bfcd 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -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 - 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 - outOrders, _, _ := tryToSplitMatterOrder(jxOrder) + outOrders, _, _ := 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 []*model.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, order.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 +} diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go index eb63049fd..62b9fe70b 100644 --- a/controllers/jx_order2.go +++ b/controllers/jx_order2.go @@ -187,3 +187,17 @@ func (c *JxOrderController) RefreshAllMatterOrderStatus() { 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 + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 420e08a3a..061cf5d33 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -718,6 +718,15 @@ func init() { Filters: 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.ControllerComments{ Method: "JxMsg",