From 68b6afe0df9274ff3831b3fb0506ee4ef915d876 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Thu, 12 Jan 2023 18:12:34 +0800 Subject: [PATCH] 1 --- .../jxcallback/scheduler/basesch/basesch.go | 8 +- .../jxcallback/scheduler/defsch/defsch.go | 9 - .../jxcallback/scheduler/defsch/defsch_ext.go | 1 - .../partner/delivery/tiktok_store/waybill.go | 28 +-- business/partner/partner.go | 2 + .../partner/purchase/tiktok_store/order.go | 57 +++-- .../partner/purchase/tiktok_store/store.go | 230 ++++++++++-------- .../partner/purchase/tiktok_store/waybill.go | 35 +++ 8 files changed, 236 insertions(+), 134 deletions(-) diff --git a/business/jxcallback/scheduler/basesch/basesch.go b/business/jxcallback/scheduler/basesch/basesch.go index 51967440b..74186005b 100644 --- a/business/jxcallback/scheduler/basesch/basesch.go +++ b/business/jxcallback/scheduler/basesch/basesch.go @@ -135,7 +135,13 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName return err } } - + //抖音配送 + if order.VendorID == model.VendorIDDD { + //取消抖音配送转自送 + localBill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID) + err = c.CancelWaybill(localBill, partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel) + partner.CurOrderManager.OnOrderMsg(order, "取消抖音配送,转用门店自配送/三方配送", err.Error()) + } return err }, "SelfDeliverDelivering orderID:%s", order.VendorOrderID) if err == nil { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中 diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 8ef919a11..c9c197a38 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -1020,15 +1020,6 @@ func (s *DefScheduler) solutionJdsOrder(bill *model.Waybill) (err error) { } func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2Keep *model.Waybill, cancelReasonID int, cancelReason string) (err error) { - //特殊处理抖音运力取消 - if savedOrderInfo.order.VendorID == model.VendorIDDD { - savedOrderInfo.waybills[0] = &model.Waybill{ - VendorOrderID: savedOrderInfo.order.VendorOrderID, - VendorWaybillID: savedOrderInfo.order.VendorWaybillID, - WaybillVendorID: model.VendorIDDD, - OrderVendorID: model.VendorIDDD, - } - } for _, v := range savedOrderInfo.waybills { if v.Status < model.WaybillStatusEndBegin && !model.IsWaybillPlatformOwn(v) && diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index 3981239eb..011b217dc 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -157,7 +157,6 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex if bills, err = s.CreateWaybillOnProviders(ctx, order, courierVendorIDs, excludeCourierVendorIDs, maxDeliveryFee, forceCreate); err == nil { if forceCreate { order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled - globals.SugarLogger.Debugf("order.DeliveryFlag============%d,order.Status===========%d", order.DeliveryFlag, order.Status) err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order) } if err == nil { diff --git a/business/partner/delivery/tiktok_store/waybill.go b/business/partner/delivery/tiktok_store/waybill.go index 569d5429c..3e1f2bd8e 100644 --- a/business/partner/delivery/tiktok_store/waybill.go +++ b/business/partner/delivery/tiktok_store/waybill.go @@ -2,7 +2,6 @@ package tiktok_store import ( "errors" - "fmt" "git.rosy.net.cn/baseapi/platformapi/mtpsapi" shop_getStoreDetail_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getStoreDetail/request" superm_createVirtualMobile_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_createVirtualMobile/response" @@ -103,19 +102,20 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee } func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) { - params := make(map[string]interface{}, 0) - params["vendorOrderID"] = bill.VendorOrderID - if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "", params, 0, 0); err != nil { - return errors.New("取消运单时,获取平台门店ID失败,请重试") - } else { - if err = getAPI(bill.VendorOrgCode).ShopOrderDispatcher(utils.Str2Int64(localOrder[0].VendorStoreID), bill.VendorOrderID, tiktok_api.DispatcherFeeTypeCancel); err != nil { - return fmt.Errorf("抖音配送取消运力失败:%v", err) - } - bill.Status = model.WaybillStatusCanceled - bill.Remark = cancelReason - partner.CurOrderManager.OnWaybillStatusChanged(bill) - } - return err + return nil + //params := make(map[string]interface{}, 0) + //params["vendorOrderID"] = bill.VendorOrderID + //if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "", params, 0, 0); err != nil { + // return errors.New("取消运单时,获取平台门店ID失败,请重试") + //} else { + // if err = getAPI(bill.VendorOrgCode).ShopOrderDispatcher(utils.Str2Int64(localOrder[0].VendorStoreID), bill.VendorOrderID, tiktok_api.DispatcherFeeTypeCancel); err != nil { + // return fmt.Errorf("抖音配送取消运力失败:%v", err) + // } + // bill.Status = model.WaybillStatusCanceled + // bill.Remark = cancelReason + // partner.CurOrderManager.OnWaybillStatusChanged(bill) + //} + //return err } func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) { diff --git a/business/partner/partner.go b/business/partner/partner.go index 68b42a6d1..47efb81a7 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -24,6 +24,7 @@ const ( CancelWaybillReasonNotAcceptIntime = 1 CancelWaybillReasonSwitch2SelfFailed = 2 CancelWaybillReasonOther = 10 + CancelWaybillReasonDYPSCancel = 11 //抖音门店转自送,取消自动运力 ) const ( @@ -73,6 +74,7 @@ var ( CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束" CancelWaybillReasonStrActive = "操作由人员主动发起" CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内" + CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力" ) var ( diff --git a/business/partner/purchase/tiktok_store/order.go b/business/partner/purchase/tiktok_store/order.go index bad881132..6e39ddf4b 100644 --- a/business/partner/purchase/tiktok_store/order.go +++ b/business/partner/purchase/tiktok_store/order.go @@ -112,7 +112,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s } else { order.OrderFinishedAt = utils.DefaultTimeValue } - order.DeliveryType = model.OrderDeliveryTypeStoreSelf + //order.DeliveryType = model.OrderDeliveryTypeStoreSelf + order.DeliveryType = model.OrderDeliveryTypePlatform order.Status = p.getStatusFromVendorStatus(result.OrderStatus) if result.UserIdInfo != nil { @@ -581,19 +582,47 @@ func (c *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan // Swtich2SelfDeliver 抖音转自送的时候就是通知抖音发货了 func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { - api := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "") - err = api.OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ - OrderId: order.VendorOrderID, - Company: "", - CompanyCode: "chengdouruoxi", - LogisticsCode: order.VendorOrderID, - IsRefundReject: false, - IsRejectRefund: false, - SerialNumberList: nil, - AddressId: 0, - StoreId: utils.Str2Int64(order.VendorStoreID), - }) - + api := getAPI(order.VendorOrgCode, 0, "") + if time.Now().Sub(order.CreatedAt) <= tiktokShop.AutoCallDelayTime15*60 { //自动运力呼叫期间不可取消 + return errors.New("抖音配送自动呼叫运力期间不可转门店自配送/三方配送,请下单成功15分钟后重试") + } + if remoteWaybill, err2 := c.GetDYPSRiderInfo(order.VendorOrderID); err2 == nil { + //remoteWaybill := &superm_getShipmentInfo_response.ShipmentInfo{ //测试数据 + // AfterSaleID: 0, + // OccurredTime: "2022-12-28 15:55:51", + // RiderLatitude: "30.693528", + // RiderLongitude: "104.045337", + // RiderName: "赵乐均", + // RiderPhone: "15108474706", + // ShipmentError: 0, + // ShipmentStatus: 2, + // ShopID: 57939570, + // ShopOrderID: 5016940182798690015, + // TrackNo: "DYA36452999870015", + //} + if remoteWaybill.ShipmentStatus >= tiktokShop.ShipmentStatusArrived { //骑手取货后不可取消 + return errors.New("抖音配送骑手已取货,不可转门店自配送/三方配送") + } else { + if localWaybill, err1 := dao.GetWaybills(dao.GetDB(), order.VendorOrderID); err1 == nil && len(localWaybill) > 0 { + if err = c.CancelWaybill(localWaybill[0], partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel); err != nil { + return fmt.Errorf("%s,不可转门店自配送/三方配送", err) + } else { + //转门店自送通知抖音发货 + err = api.OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ + OrderId: order.VendorOrderID, + Company: "", + CompanyCode: "chengdouruoxi", + LogisticsCode: order.VendorOrderID, + IsRefundReject: false, + IsRejectRefund: false, + SerialNumberList: nil, + AddressId: 0, + StoreId: utils.Str2Int64(order.VendorStoreID), + }) + } + } + } + } return err } diff --git a/business/partner/purchase/tiktok_store/store.go b/business/partner/purchase/tiktok_store/store.go index 027df2c61..3032e0bb7 100644 --- a/business/partner/purchase/tiktok_store/store.go +++ b/business/partner/purchase/tiktok_store/store.go @@ -232,9 +232,11 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee FreightTemplate.VendorStoreID = utils.Int64ToStr(vendorStoreID) if err := dao.CreateEntity(db, FreightTemplate); err != nil { if _, err1 := dao.UpdateEntity(db, FreightTemplate, "TemplateID", "WarehouseID", "FenceID", "TradeLimitID", "StoreID", "VendorStoreID"); err1 != nil { - errList.AddErr(fmt.Errorf("更新操作,同步进数据库错误信息:%v", err1)) + globals.SugarLogger.Debug("更新操作,同步进数据库错误信息:%v", err1) + //errList.AddErr(fmt.Errorf("更新操作,同步进数据库错误信息:%v", err1)) } else { - errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err)) + globals.SugarLogger.Debug("创建操作,同步进数据库错误信息:%v", err) + //errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err)) } } endErr := errList.GetErrListAsOne() @@ -369,105 +371,110 @@ func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin db = dao.GetDB() } storeInfo, err = dao.GetStoreDetail(db, storeID, model.VendorIDDD, "") - if storeInfo.OpenTime1 != 0 && storeInfo.CloseTime1 != 0 { - if storeInfo.OpenTime2 != 0 && storeInfo.CloseTime2 != 0 { - timeStr = SplicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, storeInfo.OpenTime2, storeInfo.CloseTime2, true) - } else { - timeStr = SplicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, 0, 0, false) - } - for j := 1; j <= 7; j++ { - m[int64(j)] = timeStr - } - } else { - return fmt.Errorf("营业时间必填") - } apiObj := getAPI(storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID) - if globals.EnableDdStoreWrite { - remoteStoreInfo, err2 := apiObj.GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ - StoreId: storeInfo.VendorStoreID, - }) - if err2 != nil { - return err2 - } - if remoteStoreInfo.StoreDetail.Store.StoreId == 0 { - return fmt.Errorf("ID(%d) 的门店不存在,请先创建", utils.Str2Int64(storeInfo.VendorStoreID)) - } - mergedStoreStatus := jxutils.MergeStoreStatus(storeInfo.Status, storeInfo.VendorStatus) - name = remoteStoreInfo.StoreDetail.Store.Name - if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 { - if storeInfo.VendorStoreName != "" { - name = storeInfo.VendorStoreName - } - } - store := fmt.Sprintf("门店id:%d,门店名称:%s,第三方门店状态:%d,本地修改前门店状态%d,本地门店修改后状态:%d,第三方平台Id(抖店):%s", storeID, remoteStoreInfo.StoreDetail.Store.Name, remoteStoreInfo.StoreDetail.Store.State, storeInfo.Status, mergedStoreStatus, storeInfo.VendorOrgCode) - event.AddOperateEvent(jxcontext.AdminCtx, jxcontext.AdminCtx.GetTrackInfo(), store, "", "", 10, "UpdateStore") - params := &shop_editStore_request.ShopEditStoreParam{ - StoreId: remoteStoreInfo.StoreDetail.Store.StoreId, //平台id不可修改 - Name: name, - StoreCode: utils.Int2Str(storeInfo.ID), //自用编码即本地storeID - Latitude: utils.Int2Str(storeInfo.Lat), - Longitude: utils.Int2Str(storeInfo.Lng), - Province: storeInfo.ProvinceName, - City: storeInfo.CityName, - District: storeInfo.DistrictName, - Address: storeInfo.Address, - Contact: storeInfo.Tel1, - OpenTime: &shop_editStore_request.OpenTime{ - DayMap: m, - }, - } - //修改店铺状态 - if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreStatus) != 0 { - errList.AddErr(UpdateStoreStatus(jxcontext.AdminCtx, storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID, mergedStoreStatus)) - } - if err3 := apiObj.EditStore(params); err3 != nil { - errList.AddErr(fmt.Errorf("修改门店(%d) 信息失败:%v", utils.Str2Int64(storeInfo.VendorStoreID), err3)) - } - //电子围栏 - bind, err := GetWarehouseByStore(storeInfo.VendorOrgCode, utils.Str2Int64(storeInfo.VendorStoreID)) - if err != nil { - errList.AddErr(fmt.Errorf("获取门店(%d) 电子围栏失败:%v", utils.Str2Int64(storeInfo.VendorStoreID), err)) - } else if len(bind[storeInfo.VendorStoreID][0].OutFenceIds) == 0 { - //检查是否以storeID创建过 - if bindFence, err := GetFence(storeInfo.VendorOrgCode, []string{utils.Int2Str(storeID)}); err == nil { - tempFenceID = bindFence[0].OutFenceId + //判断是否需要更新 + if !IsNeedStoreUpdate(storeInfo, utils.Int2Str(storeID)) { + return nil + } else { + if storeInfo.OpenTime1 != 0 && storeInfo.CloseTime1 != 0 { + if storeInfo.OpenTime2 != 0 && storeInfo.CloseTime2 != 0 { + timeStr = SplicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, storeInfo.OpenTime2, storeInfo.CloseTime2, true) } else { - if fenceID, err := CreateFenceByStore(storeInfo.VendorOrgCode, int64(storeID)); err != nil || len(fenceID) == 0 { //创建 - globals.SugarLogger.Debug("门店(%d) 创建电子围栏失败:%v", storeID, err) - errList.AddErr(fmt.Errorf("门店(%d) 创建电子围栏失败:%v", storeID, err)) - } else { - tempFenceID = fenceID + timeStr = SplicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, 0, 0, false) + } + for j := 1; j <= 7; j++ { + m[int64(j)] = timeStr + } + } else { + return fmt.Errorf("营业时间必填") + } + if globals.EnableDdStoreWrite { + remoteStoreInfo, err2 := apiObj.GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ + StoreId: storeInfo.VendorStoreID, + }) + if err2 != nil { + return err2 + } + if remoteStoreInfo.StoreDetail.Store.StoreId == 0 { + return fmt.Errorf("ID(%d) 的门店不存在,请先创建", utils.Str2Int64(storeInfo.VendorStoreID)) + } + mergedStoreStatus := jxutils.MergeStoreStatus(storeInfo.Status, storeInfo.VendorStatus) + name = remoteStoreInfo.StoreDetail.Store.Name + if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 { + if storeInfo.VendorStoreName != "" { + name = storeInfo.VendorStoreName } } - if err := BindFenceByStore(storeInfo.VendorOrgCode, utils.Str2Int64(storeInfo.VendorStoreID), []string{tempFenceID}); err != nil { - globals.SugarLogger.Debug("门店(%d) 绑定电子围栏:%s失败:%v", storeID, tempFenceID, err) - errList.AddErr(fmt.Errorf("门店(%d) 绑定电子围栏:%s失败:%v", storeID, tempFenceID, err)) + store := fmt.Sprintf("门店id:%d,门店名称:%s,第三方门店状态:%d,本地修改前门店状态%d,本地门店修改后状态:%d,第三方平台Id(抖店):%s", storeID, remoteStoreInfo.StoreDetail.Store.Name, remoteStoreInfo.StoreDetail.Store.State, storeInfo.Status, mergedStoreStatus, storeInfo.VendorOrgCode) + event.AddOperateEvent(jxcontext.AdminCtx, jxcontext.AdminCtx.GetTrackInfo(), store, "", "", 10, "UpdateStore") + params := &shop_editStore_request.ShopEditStoreParam{ + StoreId: remoteStoreInfo.StoreDetail.Store.StoreId, //平台id不可修改 + Name: name, + StoreCode: utils.Int2Str(storeInfo.ID), //自用编码即本地storeID + Latitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeInfo.Lat)), + Longitude: utils.Float64ToStr(jxutils.IntCoordinate2Standard(storeInfo.Lng)), + Province: storeInfo.ProvinceName, + City: storeInfo.CityName, + District: storeInfo.DistrictName, + Address: storeInfo.Address, + Contact: storeInfo.Tel1, + OpenTime: &shop_editStore_request.OpenTime{ + DayMap: m, + }, } - } else if len(bind[storeInfo.VendorStoreID][0].OutFenceIds) > 0 { - //默认更新第一个电子围栏 - outFenceID := bind[storeInfo.VendorStoreID][0].OutFenceIds[0] - if err = UpdateFenceByStore(storeInfo.VendorOrgCode, outFenceID, storeID); err != nil { - errList.AddErr(errors.New(fmt.Sprintf("更新电子围栏失败,原因:%v", err))) + //修改店铺状态 + if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreStatus) != 0 { + errList.AddErr(UpdateStoreStatus(jxcontext.AdminCtx, storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID, mergedStoreStatus)) + } + if err3 := apiObj.EditStore(params); err3 != nil { + errList.AddErr(fmt.Errorf("修改门店(%d) 信息失败:%v", utils.Str2Int64(storeInfo.VendorStoreID), err3)) + } + //电子围栏 + bind, err := GetWarehouseByStore(storeInfo.VendorOrgCode, utils.Str2Int64(storeInfo.VendorStoreID)) + if err != nil { + errList.AddErr(fmt.Errorf("获取门店(%d) 电子围栏失败:%v", utils.Str2Int64(storeInfo.VendorStoreID), err)) + } else if len(bind[storeInfo.VendorStoreID][0].OutFenceIds) == 0 { + //检查是否以storeID创建过 + if bindFence, err := GetFence(storeInfo.VendorOrgCode, []string{utils.Int2Str(storeID)}); err == nil { + tempFenceID = bindFence[0].OutFenceId + } else { + if fenceID, err := CreateFenceByStore(storeInfo.VendorOrgCode, int64(storeID)); err != nil || len(fenceID) == 0 { //创建 + globals.SugarLogger.Debug("门店(%d) 创建电子围栏失败:%v", storeID, err) + errList.AddErr(fmt.Errorf("门店(%d) 创建电子围栏失败:%v", storeID, err)) + } else { + tempFenceID = fenceID + } + } + if err := BindFenceByStore(storeInfo.VendorOrgCode, utils.Str2Int64(storeInfo.VendorStoreID), []string{tempFenceID}); err != nil { + globals.SugarLogger.Debug("门店(%d) 绑定电子围栏:%s失败:%v", storeID, tempFenceID, err) + errList.AddErr(fmt.Errorf("门店(%d) 绑定电子围栏:%s失败:%v", storeID, tempFenceID, err)) + } + } else if len(bind[storeInfo.VendorStoreID][0].OutFenceIds) > 0 { + //默认更新第一个电子围栏 + outFenceID := bind[storeInfo.VendorStoreID][0].OutFenceIds[0] + if err = UpdateFenceByStore(storeInfo.VendorOrgCode, outFenceID, storeID); err != nil { + errList.AddErr(errors.New(fmt.Sprintf("更新电子围栏失败,原因:%v", err))) + } + FreightTemplate.FenceID = outFenceID } - FreightTemplate.FenceID = outFenceID } - } - //同步进数据库 - FreightTemplate.FenceID = tempFenceID - FreightTemplate.StoreID = storeID - FreightTemplate.VendorStoreID = storeInfo.VendorStoreID - if err = dao.CreateEntity(db, FreightTemplate); err != nil { - if _, err1 := dao.UpdateEntity(db, FreightTemplate, "FenceID", "StoreID", "VendorStoreID"); err1 != nil { - globals.SugarLogger.Debugf("db update storeID,vendorStoreID defeat on :%v", err1) - //errList.AddErr(fmt.Errorf("更新操作,同步进数据库错误信息:%v", err1)) - } else { - globals.SugarLogger.Debugf("db create storeID,vendorStoreID defeat on :%v", err) - //errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err)) + //同步进数据库 + FreightTemplate.FenceID = tempFenceID + FreightTemplate.StoreID = storeID + FreightTemplate.VendorStoreID = storeInfo.VendorStoreID + if err = dao.CreateEntity(db, FreightTemplate); err != nil { + if _, err1 := dao.UpdateEntity(db, FreightTemplate, "FenceID", "StoreID", "VendorStoreID"); err1 != nil { + errList.AddErr(fmt.Errorf("更新操作,同步进数据库错误信息:%v", err1)) + } else { + errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err)) + } } + if endErr := errList.GetErrListAsOne(); endErr != nil { + globals.SugarLogger.Debugf("DouDian UpdateStore wrong information:%v", endErr) + } + return nil + //return errors.New(fmt.Sprintf("更新抖店平台店铺信息,相关处理错误:%v", endErr)) } - endErr := errList.GetErrListAsOne() - globals.SugarLogger.Debugf("DouDian UpdateStore wrong information:%v", endErr) - return errors.New(fmt.Sprintf("更新抖店平台店铺信息,相关处理错误:%v", endErr)) } // UpdateStoreStatus shop/unsuspendStore 门店恢复营业 @@ -1014,6 +1021,7 @@ func (p *PurchaseHandler) GetSkus(ctx *jxcontext.Context, vendorOrgCode string, } //以下为辅助函数 + type RelInfo struct { StoreID string `json:"storeID"` VendorStoreID string `json:"vendorStoreID"` @@ -1042,13 +1050,45 @@ func HandleMunicipality(cityName string) bool { //判断门店是否审核通过 func IfAuditPass(vendorOrgCode string, vendorStoreID int64) bool { - flag := false if remoteStore, err := getAPI(vendorOrgCode, 0, " ").GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ StoreId: utils.Int64ToStr(vendorStoreID), }); err == nil { if remoteStore.StoreDetail.Store.PoiAuditState != tiktok_api.PoiAuditStateSuccessBind || remoteStore.StoreDetail.Store.State != tiktok_api.StoreStateSuccessBind || remoteStore.StoreDetail.Store.QualState != tiktok_api.QualStateCheckingPassed || remoteStore.StoreDetail.Store.RemitState != tiktok_api.RemitStateCheckingPassed || remoteStore.StoreDetail.Store.OpenAccountState != tiktok_api.OpenAccountStateOpen { - flag = true + return true } } - return flag + return false +} + +//判断门店信息是否需要修改 +func IsNeedStoreUpdate(lStore *dao.StoreDetail, storeID string) bool { + if remoteStore, err := getAPI(lStore.VendorOrgCode, 0, "").GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ + StoreId: storeID, + IsNeedPoiAuditInfo: false, + IsNeedRelShopUser: false, + IsNeedChargeInfo: false, + }); err == nil { + rStore := remoteStore.StoreDetail.Store + if lStore.Tel1 != rStore.Contact || lStore.Name != rStore.Name || lStore.Address != rStore.Address { + return true + } + if lStore.ProvinceName != rStore.Province || lStore.CityName != rStore.City || lStore.DistrictName != rStore.District { + return true + } + if utils.Float64ToStr(jxutils.IntCoordinate2Standard(lStore.Lat)) != rStore.Latitude || utils.Float64ToStr(jxutils.IntCoordinate2Standard(lStore.Lng)) != rStore.Longitude { + return true + } + timeStr := "" + if lStore.OpenTime1 != 0 && lStore.CloseTime1 != 0 { + if lStore.OpenTime2 != 0 && lStore.CloseTime2 != 0 { + timeStr = SplicingTimeToDoudian(lStore.OpenTime1, lStore.CloseTime1, lStore.OpenTime2, lStore.CloseTime2, true) + } else { + timeStr = SplicingTimeToDoudian(lStore.OpenTime1, lStore.CloseTime1, 0, 0, false) + } + } + if timeStr != rStore.OpenTime.DayMap[1] { + return true + } + } + return false } diff --git a/business/partner/purchase/tiktok_store/waybill.go b/business/partner/purchase/tiktok_store/waybill.go index 395bb3114..862f99783 100644 --- a/business/partner/purchase/tiktok_store/waybill.go +++ b/business/partner/purchase/tiktok_store/waybill.go @@ -2,6 +2,8 @@ package tiktok_store import ( "errors" + "fmt" + superm_getShipmentInfo_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_getShipmentInfo/response" superm_getStoreAutoCallRiderInfo_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_getStoreAutoCallRiderInfo/response" superm_setStoreAutoCallRider_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_setStoreAutoCallRider/request" "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" @@ -112,3 +114,36 @@ func GetStoreAutoCallRiderInfo(vendorOrgCode string, storeIDs []int64) (map[int6 } return tAutoCallInfos, nil } + +//取消自动运力 +func (c *PurchaseHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) { + params := make(map[string]interface{}, 0) + params["vendorOrderID"] = bill.VendorOrderID + if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "", params, 0, 0); err != nil { + return errors.New("取消运单时,获取平台门店ID失败,请重试") + } else { + if err = getAPI(bill.VendorOrgCode, 0, "").ShopOrderDispatcher(utils.Str2Int64(localOrder[0].VendorStoreID), bill.VendorOrderID, tiktok_api.DispatcherFeeTypeCancel); err != nil { + return fmt.Errorf("抖音配送取消运力失败:%v", err) + } + bill.Status = model.WaybillStatusCanceled + bill.Remark = cancelReason + partner.CurOrderManager.OnWaybillStatusChanged(bill) + } + return err +} + +//查询运力状态 +func (c *PurchaseHandler) GetDYPSRiderInfo(orderId string) (*superm_getShipmentInfo_response.ShipmentInfo, error) { + params := map[string]interface{}{ + "vendorOrderID": orderId, + } + orderInfo, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, nil, false, "", params, 0, 0) + if err != nil { + return nil, errors.New("获取本地门店账号信息失败,请重试") + } + if waybill, err := getAPI(orderInfo[0].VendorOrgCode, 0, "").GetShipmentInfo(utils.Str2Int64(orderId), 0, tiktok_api.ShipmentTypeInvoice); err != nil { + return nil, err + } else { + return waybill, nil + } +}