From cd371f6bad866d1432ae8f44f0afc1215be40e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Mon, 16 Mar 2020 16:20:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E5=8F=96=E6=B6=88=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jx/localjx/order.go | 94 +++++++++++-------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index af9cc49da..1dc99d816 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -203,7 +203,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, return nil, fmt.Errorf("商品或配送信息发生改变,请重新下单") } outJxOrder.OrderID = GenOrderNo(ctx) - order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) + order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress, "") if err = err2; err == nil { order.AddressID = addressID order.Status = model.OrderStatusWait4Pay @@ -699,14 +699,14 @@ func matterSkusLimited(skus []*JxSkuInfo, storeID int) (err error) { return err } -func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAddress *dao.UserDeliveryAddressEx) (order *model.GoodsOrder, err error) { +func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAddress *dao.UserDeliveryAddressEx, userID string) (order *model.GoodsOrder, err error) { order = &model.GoodsOrder{ VendorOrderID: utils.Int64ToStr(jxOrder.OrderID), VendorID: model.VendorIDJX, VendorStoreID: utils.Int2Str(jxOrder.StoreID), StoreID: jxOrder.StoreID, StoreName: jxOrder.StoreName, - UserID: ctx.GetUserID(), + // UserID: ctx.GetUserID(), ConsigneeName: deliveryAddress.ConsigneeName, ConsigneeMobile: deliveryAddress.ConsigneeMobile, @@ -724,6 +724,11 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd DeliveryType: model.OrderDeliveryTypeStoreSelf, StatusTime: time.Now(), } + if userID == "" { + order.UserID = ctx.GetUserID() + } else { + order.UserID = userID + } order.OrderCreatedAt = order.StatusTime order.VendorUserID = order.UserID if jxOrder.ExpectedDeliveredTimestamp != 0 { @@ -749,6 +754,7 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd if jxOrder.FromStoreID != 0 { order.FromStoreID = jxOrder.FromStoreID order.WaybillVendorID = model.VendorIDJDWL + order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled } return order, err } @@ -833,34 +839,34 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) { } dao.CreateEntity(db, waybill) } else { //如果重量超过5kg则需要进行拆单分包,商品分包规则。最后一个包不超过5kg,其他包不超过3kg - // jxOrder := &JxOrderInfo{} - // jxOrder.StoreID = order.StoreID - // var skus []*JxSkuInfo - // for _, v := range orderSkus { - // 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 - // outOrders, _, _ := tryToSplitMatterOrder(jxOrder) - // for k, v := range outOrders { - // outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, v, order.AddressID, order.FromStoreID, order.UserID) - // if err != nil { - // return err - // } - // outJxOrder.OrderID = utils.Str2Int64(order.VendorOrderID)*100 + int64(k+1) - // order2, err2 := jxOrder2GoodsOrder(jxcontext.AdminCtx, outJxOrder, deliveryAddress) - // if err = err2; err == nil { - // order2.AddressID = order.AddressID - // order2.Status = model.OrderStatusDelivering - // err = partner.CurOrderManager.OnOrderNew(order2, model.Order2Status(order2)) - // orderSolutionForWuLiao(order2) - // } - // } + jxOrder := &JxOrderInfo{} + jxOrder.StoreID = order.StoreID + var skus []*JxSkuInfo + for _, v := range orderSkus { + 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 + outOrders, _, _ := tryToSplitMatterOrder(jxOrder) + for k, v := range outOrders { + outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, v, order.AddressID, order.FromStoreID, order.UserID) + if err != nil { + return err + } + outJxOrder.OrderID = utils.Str2Int64(order.VendorOrderID)*100 + int64(k+1) + 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)) + orderSolutionForWuLiao(order2) + } + } //刷新一下库存 for _, v := range goods[0].Skus { cms.RefreshMatterStock(jxcontext.AdminCtx, v.SkuID) @@ -894,20 +900,17 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) if err == nil { dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName()) errList.AddErr(dao.CreateEntity(dao.GetDB(), orderPayRefund)) - MarkArrears(db, order, orderPay) - CancelMatterOrder(db, order) } else { errList.AddErr(err) } } else if orderPay.PayType == model.PayTypeTL { orderPayRefund, err = refundOrderByTL(ctx, orderPay, refundID, orderPay.TotalFee, reason) - if err == nil { - MarkArrears(db, order, orderPay) - CancelMatterOrder(db, order) - } else { + if err != nil { errList.AddErr(err) } } + MarkArrears(db, order, orderPay) + CancelMatterOrder(db, order) } else { orderPay.Status = model.PayStatusCanceled _, err2 := dao.UpdateEntity(db, orderPay) @@ -923,6 +926,9 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) errList.AddErr(changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, reason)) } err = errList.GetErrListAsOne() + if len(payList) == 0 { + CancelMatterOrder(db, order) + } } else { err = fmt.Errorf("当前订单状态:%s不允许取消", model.OrderStatusName[order.Status]) } @@ -931,7 +937,19 @@ func CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) func CancelMatterOrder(db *dao.DaoDB, order *model.GoodsOrder) (err error) { if order.FromStoreID != 0 { - _, err = api.JdEclpAPI.CancelOrder(order.EclpOutID) + if order.EclpOutID != "" { + _, 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) + if err == nil && len(goodsList) > 0 { + for _, v := range goodsList { + _, err = api.JdEclpAPI.CancelOrder(v.EclpOutID) + } + } + } } return err }