From 6022d246343ec0e4299ecb4332d1d8cb2a22752c Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 25 Dec 2019 20:14:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?GetOrderWaybillInfo=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=9AisGetPos=E6=94=AF=E6=8C=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=BF=90=E5=8D=95=E9=AA=91=E6=89=8B=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/orderman_ext.go | 23 +++++++++++++++++-- .../jxcallback/scheduler/defsch/defsch_ext.go | 4 ++-- business/model/const.go | 5 ++++ business/model/order.go | 6 +++++ business/partner/delivery/dada/waybill.go | 9 ++++++++ .../partner/delivery/dada/waybill_test.go | 14 ++++++++--- business/partner/delivery/mtps/waybill.go | 10 ++++++++ business/partner/partner.go | 12 +++++++++- business/partner/partner_order.go | 4 ++++ controllers/jx_order.go | 5 ++-- 10 files changed, 82 insertions(+), 10 deletions(-) diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 675d260d9..175b1584d 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -161,7 +161,7 @@ func (c *OrderManager) GetOrderInfo(ctx *jxcontext.Context, vendorOrderID string return nil, err } -func (c *OrderManager) GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isNotEnded bool) (bills []*model.Waybill, err error) { +func (c *OrderManager) GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isNotEnded, isGetPos bool) (bills []*model.WaybillExt, err error) { globals.SugarLogger.Debugf("GetOrderWaybillInfo orderID:%s", vendorOrderID) db := dao.GetDB() sql := ` @@ -178,7 +178,26 @@ func (c *OrderManager) GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID sqlParams = append(sqlParams, model.OrderStatusEndBegin) } err = dao.GetRows(db, &bills, sql, sqlParams...) - globals.SugarLogger.Infof("GetOrderWaybillInfo orderID:%s failed with error:%v", vendorOrderID, err) + if err == nil && isGetPos { + var taskBills []*model.WaybillExt + for _, v := range bills { + if v.Status >= model.WaybillStatusAccepted && v.Status <= model.WaybillStatusDelivering { + if handler := partner.GetRidderPositionGetter(v.WaybillVendorID); handler != nil { + taskBills = append(taskBills, v) + } + } + } + if len(taskBills) > 0 { + task := tasksch.NewParallelTask("GetOrderWaybillInfo", nil, ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + waybill := batchItemList[0].(*model.WaybillExt) + waybill.Lng, waybill.Lat, err = partner.GetRidderPositionGetter(waybill.WaybillVendorID).GetRidderPosition(ctx, waybill.VendorOrderID, waybill.VendorOrderID, waybill.VendorWaybillID, waybill.VendorWaybillID2) + return nil, err + }, taskBills) + tasksch.HandleTask(task, nil, false).Run() + task.GetResult(0) + } + } return bills, err } diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index af13179b8..9acf53a29 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -214,13 +214,13 @@ func (s *DefScheduler) QueryOrderWaybillFeeInfoEx(ctx *jxcontext.Context, vendor if err != nil { return nil, err } - waybillList, err := partner.CurOrderManager.GetOrderWaybillInfo(ctx, vendorOrderID, vendorID, true) + waybillList, err := partner.CurOrderManager.GetOrderWaybillInfo(ctx, vendorOrderID, vendorID, true, false) if err != nil { return nil, err } waybillMap := make(map[int]*model.Waybill) for _, bill := range waybillList { - waybillMap[bill.WaybillVendorID] = bill + waybillMap[bill.WaybillVendorID] = &bill.Waybill } deliveryFeeMap = make(map[int]*partner.WaybillFeeInfo) diff --git a/business/model/const.go b/business/model/const.go index 496ba1fa5..2c85c1ee3 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -221,6 +221,7 @@ const ( WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应 WaybillStatusCanceled = 115 WaybillStatusFailed = 120 // 这个状态存在的意义是区分于WaybillStatusCanceled,比如达达平台在这种状态下再次创建运单的方式不一样 + WaybillStatusEndEnd = 120 ) const ( @@ -366,3 +367,7 @@ func WaybillVendorID2Mask(vendorID int) (mask int8) { func IsAfsOrderFinalStatus(status int) bool { return status >= AfsOrderStatusFinished && status <= AfsOrderStatusFailed } + +func IsWaybillFinalStatus(status int) bool { + return status >= WaybillStatusEndBegin && status <= WaybillStatusEndEnd +} diff --git a/business/model/order.go b/business/model/order.go index 7c22bf59b..264140f9d 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -197,6 +197,12 @@ func (w *Waybill) TableIndex() [][]string { } } +type WaybillExt struct { + Waybill + Lng float64 `json:"lng"` + Lat float64 `json:"lat"` +} + // 包含订单与运单的状态及事件vendor status type OrderStatus struct { ID int64 `orm:"column(id)" json:"id"` diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index a15f0fc79..e9e732629 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -410,3 +410,12 @@ func (c *DeliveryHandler) AddWaybillTip(ctx *jxcontext.Context, vendorOrgCode, v } return err } + +func (c *DeliveryHandler) GetRidderPosition(ctx *jxcontext.Context, vendorOrgCode, vendorOrderID, vendorWaybillID, vendorWaybillID2 string) (lng, lat float64, err error) { + order, err := api.DadaAPI.QueryOrderInfo2(vendorOrderID) + if err == nil { + lng = utils.Str2Float64WithDefault(order.TransporterLng, 0) + lat = utils.Str2Float64WithDefault(order.TransporterLat, 0) + } + return lng, lat, err +} diff --git a/business/partner/delivery/dada/waybill_test.go b/business/partner/delivery/dada/waybill_test.go index d2b28e527..a7a680f69 100644 --- a/business/partner/delivery/dada/waybill_test.go +++ b/business/partner/delivery/dada/waybill_test.go @@ -5,6 +5,7 @@ import ( "time" _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals/testinit" @@ -18,15 +19,14 @@ func TestCreateWaybill(t *testing.T) { orderID := "817540316000041" if order, err := partner.CurOrderManager.LoadOrder(orderID, model.VendorIDJD); err == nil { // globals.SugarLogger.Debug(order) - c := new(DeliveryHandler) - _, err = c.CreateWaybill(order, nil) + _, err = CurDeliveryHandler.CreateWaybill(order, 0) if err == nil { time.Sleep(1 * time.Second) bill := &model.Waybill{ VendorOrderID: orderID, WaybillVendorID: model.VendorIDDada, } - err = c.CancelWaybill(bill, partner.CancelWaybillReasonOther, "") + err = CurDeliveryHandler.CancelWaybill(bill, partner.CancelWaybillReasonOther, "") if err != nil { t.Fatal(err.Error()) } @@ -37,3 +37,11 @@ func TestCreateWaybill(t *testing.T) { t.Fatal(err.Error()) } } + +func TestGetRidderPosition(t *testing.T) { + lng, lat, err := CurDeliveryHandler.GetRidderPosition(jxcontext.AdminCtx, "", "80704840263399812", "", "") + if err != nil { + t.Fatal(err) + } + t.Logf("lng:%f, lat:%f", lng, lat) +} diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 59155db97..3f5bd9713 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -8,6 +8,7 @@ import ( "git.rosy.net.cn/baseapi/platformapi/mtpsapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" @@ -255,3 +256,12 @@ func (c *DeliveryHandler) ComplaintRider(bill *model.Waybill, resonID int, reson err = api.MtpsAPI.EvaluateRider(utils.Str2Int64(bill.VendorWaybillID2), bill.VendorWaybillID, 1, resonContent) return err } + +func (c *DeliveryHandler) GetRidderPosition(ctx *jxcontext.Context, vendorOrgCode, vendorOrderID, vendorWaybillID, vendorWaybillID2 string) (lng, lat float64, err error) { + intLng, intLat, err := api.MtpsAPI.RiderLocation(utils.Str2Int64(vendorWaybillID2), vendorWaybillID) + if err == nil { + lng = jxutils.IntCoordinate2Standard(intLng) + lat = jxutils.IntCoordinate2Standard(intLat) + } + return lng, lat, err +} diff --git a/business/partner/partner.go b/business/partner/partner.go index 2f8587541..dbdce3b9b 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -109,7 +109,7 @@ type IOrderManager interface { SaveOrderFinancialInfo(order *model.OrderFinancial, operation string) (err error) SaveAfsOrderFinancialInfo(afsOrder *model.AfsOrder) (err error) - GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isNotEnded bool) (bills []*model.Waybill, err error) + GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isNotEnded, isGetPos bool) (bills []*model.WaybillExt, err error) // afs order OnAfsOrderAdjust(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error) @@ -277,3 +277,13 @@ func IsMultiStore(vendorID int) bool { } return false } + +func GetRidderPositionGetter(vendorID int) (handler IRidderPositionGetter) { + if handlerInfo := GetDeliveryPlatformFromVendorID(vendorID); handlerInfo != nil { + if handler, _ = handlerInfo.Handler.(IRidderPositionGetter); handler != nil { + return handler + } + } + handler, _ = GetPurchasePlatformFromVendorID(vendorID).(IRidderPositionGetter) + return handler +} diff --git a/business/partner/partner_order.go b/business/partner/partner_order.go index 231d56a45..b68b07e95 100644 --- a/business/partner/partner_order.go +++ b/business/partner/partner_order.go @@ -61,3 +61,7 @@ type IAddWaybillTip interface { GetWaybillTip(ctx *jxcontext.Context, vendorOrgCode, vendorOrderID, vendorWaybillID, vendorWaybillID2 string) (tipFee int64, err error) AddWaybillTip(ctx *jxcontext.Context, vendorOrgCode, vendorOrderID, vendorWaybillID, vendorWaybillID2, cityCode string, tipFee2Add int64) (err error) } + +type IRidderPositionGetter interface { + GetRidderPosition(ctx *jxcontext.Context, vendorOrgCode, vendorOrderID, vendorWaybillID, vendorWaybillID2 string) (lng, lat float64, err error) +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 1ee893884..3e9811381 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -220,12 +220,13 @@ func (c *OrderController) GetOrderInfo() { // @Param vendorOrderID query string true "订单ID" // @Param vendorID query int true "订单所属的厂商ID" // @Param isNotEnded query bool false "是否只是没有结束的运单" +// @Param isGetPos query bool false "是否得到骑手位置" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /GetOrderWaybillInfo [get] func (c *OrderController) GetOrderWaybillInfo() { c.callGetOrderWaybillInfo(func(params *tOrderGetOrderWaybillInfoParams) (retVal interface{}, errCode string, err error) { - retVal, err = orderman.FixedOrderManager.GetOrderWaybillInfo(params.Ctx, params.VendorOrderID, params.VendorID, params.IsNotEnded) + retVal, err = orderman.FixedOrderManager.GetOrderWaybillInfo(params.Ctx, params.VendorOrderID, params.VendorID, params.IsNotEnded, params.IsGetPos) return retVal, "", err }) } @@ -900,7 +901,7 @@ func (c *OrderController) GetComplaintReasons() { // @router /ComplaintRider [post] func (c *OrderController) ComplaintRider() { c.callComplaintRider(func(params *tOrderComplaintRiderParams) (retVal interface{}, errCode string, err error) { - err = orderman.ComplaintRider(params.Ctx, params.OrderID,params.VendorID, params.ComplaintID) + err = orderman.ComplaintRider(params.Ctx, params.OrderID, params.VendorID, params.ComplaintID) return retVal, "", err }) } From f69afe7c4a2303924b99451f83aacafb43370211 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 25 Dec 2019 21:38:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?AdjustOrder=E4=B8=8EPartRefundOrder?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=AF=B9=E4=BA=8E=E5=95=86=E5=93=81=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=8F=AF=E8=83=BD=E7=9A=84=E5=90=88=E5=B9=B6=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/jx_order.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 3e9811381..afb804ea5 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -515,7 +515,7 @@ func (c *OrderController) GetPrinterStatus() { }) } -func skuList2Map(skuList []*model.OrderSku) (skuCount int, skuMap map[int64]*model.OrderSku) { +func skuList2Map(skuList []*model.OrderSku) (skuCount int, skuMap map[int64]*model.OrderSku, outSkuList []*model.OrderSku) { skuMap = make(map[int64]*model.OrderSku) for _, sku := range skuList { skuCount += sku.Count @@ -525,12 +525,13 @@ func skuList2Map(skuList []*model.OrderSku) (skuCount int, skuMap map[int64]*mod if skuMap[index] == nil { tmpSku := *sku skuMap[index] = &tmpSku + outSkuList = append(outSkuList, skuMap[index]) } else { skuMap[index].Count += sku.Count } } } - return skuCount, skuMap + return skuCount, skuMap, outSkuList } func getSkuFromMap(skuMap map[int64]*model.OrderSku, skuID, actID int) (sku *model.OrderSku) { @@ -555,6 +556,7 @@ func (c *OrderController) AdjustOrder() { var skuList []*model.OrderSku err = jxutils.Strings2Objs(params.RemovedSkuInfo, &skuList) if err == nil { + _, _, skuList = skuList2Map(skuList) var order *model.GoodsOrder order, err = partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID) if err == nil { @@ -781,6 +783,7 @@ func (c *OrderController) PartRefundOrder() { var skuList []*model.OrderSku err = jxutils.Strings2Objs(params.RefundSkuList, &skuList) if err == nil { + _, _, skuList = skuList2Map(skuList) var order *model.GoodsOrder order, err = partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID) if err == nil { @@ -799,7 +802,7 @@ func (c *OrderController) PartRefundOrder() { } func fillSkuList(skuList, orderSkuList []*model.OrderSku) (isSame bool, err error) { - skuCount, orderSkuMap := skuList2Map(orderSkuList) + skuCount, orderSkuMap, _ := skuList2Map(orderSkuList) skuCount2 := 0 for _, sku := range skuList { skuCount2 += sku.Count From 6c13f113e8d50aa7a74cd9df6e04991ff296685a Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 25 Dec 2019 21:54:16 +0800 Subject: [PATCH 3/3] =?UTF-8?q?jdapi.AdjustOrder=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jd/order.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index a4bcc73e7..f47577449 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -437,11 +437,18 @@ func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) { order = jxutils.RemoveSkuFromOrder(order, removedSkuList) var oaosAdjustDTOList []*jdapi.OAOSAdjustDTO + dtoMap := make(map[int]*jdapi.OAOSAdjustDTO) for _, sku := range order.Skus { - oaosAdjustDTOList = append(oaosAdjustDTOList, &jdapi.OAOSAdjustDTO{ - OutSkuID: utils.Int2Str(jxutils.GetSkuIDFromOrderSku(sku)), - SkuCount: sku.Count, - }) + skuID := jxutils.GetSkuIDFromOrderSku(sku) + if dtoMap[skuID] == nil { + dtoMap[skuID] = &jdapi.OAOSAdjustDTO{ + OutSkuID: utils.Int2Str(skuID), + SkuCount: sku.Count, + } + oaosAdjustDTOList = append(oaosAdjustDTOList, dtoMap[skuID]) + } else { + dtoMap[skuID].SkuCount += sku.Count + } } if globals.EnableJdStoreWrite { err = getAPI(order.VendorOrgCode).AdjustOrder(order.VendorOrderID, ctx.GetUserName(), reason, oaosAdjustDTOList)