This commit is contained in:
richboo111
2023-01-12 18:12:34 +08:00
parent da46891379
commit 68b6afe0df
8 changed files with 236 additions and 134 deletions

View File

@@ -135,7 +135,13 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName
return err 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 return err
}, "SelfDeliverDelivering orderID:%s", order.VendorOrderID) }, "SelfDeliverDelivering orderID:%s", order.VendorOrderID)
if err == nil { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中 if err == nil { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中

View File

@@ -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) { 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 { for _, v := range savedOrderInfo.waybills {
if v.Status < model.WaybillStatusEndBegin && if v.Status < model.WaybillStatusEndBegin &&
!model.IsWaybillPlatformOwn(v) && !model.IsWaybillPlatformOwn(v) &&

View File

@@ -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 bills, err = s.CreateWaybillOnProviders(ctx, order, courierVendorIDs, excludeCourierVendorIDs, maxDeliveryFee, forceCreate); err == nil {
if forceCreate { if forceCreate {
order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled
globals.SugarLogger.Debugf("order.DeliveryFlag============%d,order.Status===========%d", order.DeliveryFlag, order.Status)
err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order) err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
} }
if err == nil { if err == nil {

View File

@@ -2,7 +2,6 @@ package tiktok_store
import ( import (
"errors" "errors"
"fmt"
"git.rosy.net.cn/baseapi/platformapi/mtpsapi" "git.rosy.net.cn/baseapi/platformapi/mtpsapi"
shop_getStoreDetail_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_getStoreDetail/request" 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" 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) { func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, cancelReason string) (err error) {
params := make(map[string]interface{}, 0) return nil
params["vendorOrderID"] = bill.VendorOrderID //params := make(map[string]interface{}, 0)
if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "", params, 0, 0); err != nil { //params["vendorOrderID"] = bill.VendorOrderID
return errors.New("取消运单时获取平台门店ID失败请重试") //if localOrder, _, err := dao.GetOrders(dao.GetDB(), nil, false, false, "", "", false, []int{0}, false, "", params, 0, 0); err != nil {
} else { // return errors.New("取消运单时获取平台门店ID失败请重试")
if err = getAPI(bill.VendorOrgCode).ShopOrderDispatcher(utils.Str2Int64(localOrder[0].VendorStoreID), bill.VendorOrderID, tiktok_api.DispatcherFeeTypeCancel); err != nil { //} else {
return fmt.Errorf("抖音配送取消运力失败:%v", err) // 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 // bill.Status = model.WaybillStatusCanceled
partner.CurOrderManager.OnWaybillStatusChanged(bill) // bill.Remark = cancelReason
} // partner.CurOrderManager.OnWaybillStatusChanged(bill)
return err //}
//return err
} }
func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) { func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *partner.WaybillFeeInfo, err error) {

View File

@@ -24,6 +24,7 @@ const (
CancelWaybillReasonNotAcceptIntime = 1 CancelWaybillReasonNotAcceptIntime = 1
CancelWaybillReasonSwitch2SelfFailed = 2 CancelWaybillReasonSwitch2SelfFailed = 2
CancelWaybillReasonOther = 10 CancelWaybillReasonOther = 10
CancelWaybillReasonDYPSCancel = 11 //抖音门店转自送,取消自动运力
) )
const ( const (
@@ -73,6 +74,7 @@ var (
CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束" CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束"
CancelWaybillReasonStrActive = "操作由人员主动发起" CancelWaybillReasonStrActive = "操作由人员主动发起"
CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内" CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内"
CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力"
) )
var ( var (

View File

@@ -112,7 +112,8 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
} else { } else {
order.OrderFinishedAt = utils.DefaultTimeValue order.OrderFinishedAt = utils.DefaultTimeValue
} }
order.DeliveryType = model.OrderDeliveryTypeStoreSelf //order.DeliveryType = model.OrderDeliveryTypeStoreSelf
order.DeliveryType = model.OrderDeliveryTypePlatform
order.Status = p.getStatusFromVendorStatus(result.OrderStatus) order.Status = p.getStatusFromVendorStatus(result.OrderStatus)
if result.UserIdInfo != nil { if result.UserIdInfo != nil {
@@ -581,19 +582,47 @@ func (c *PurchaseHandler) CanSwitch2SelfDeliver(order *model.GoodsOrder) (isCan
// Swtich2SelfDeliver 抖音转自送的时候就是通知抖音发货了 // Swtich2SelfDeliver 抖音转自送的时候就是通知抖音发货了
func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) { func (c *PurchaseHandler) Swtich2SelfDeliver(order *model.GoodsOrder, userName string) (err error) {
api := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "") api := getAPI(order.VendorOrgCode, 0, "")
err = api.OrderDelivering(&order_logisticsAdd_request.OrderLogisticsAddParam{ if time.Now().Sub(order.CreatedAt) <= tiktokShop.AutoCallDelayTime15*60 { //自动运力呼叫期间不可取消
OrderId: order.VendorOrderID, return errors.New("抖音配送自动呼叫运力期间不可转门店自配送/三方配送请下单成功15分钟后重试")
Company: "", }
CompanyCode: "chengdouruoxi", if remoteWaybill, err2 := c.GetDYPSRiderInfo(order.VendorOrderID); err2 == nil {
LogisticsCode: order.VendorOrderID, //remoteWaybill := &superm_getShipmentInfo_response.ShipmentInfo{ //测试数据
IsRefundReject: false, // AfterSaleID: 0,
IsRejectRefund: false, // OccurredTime: "2022-12-28 15:55:51",
SerialNumberList: nil, // RiderLatitude: "30.693528",
AddressId: 0, // RiderLongitude: "104.045337",
StoreId: utils.Str2Int64(order.VendorStoreID), // 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 return err
} }

View File

@@ -232,9 +232,11 @@ func CreateOrUpdateAll(vendorOrgCode string, storeID, vendorStoreID, deliveryFee
FreightTemplate.VendorStoreID = utils.Int64ToStr(vendorStoreID) FreightTemplate.VendorStoreID = utils.Int64ToStr(vendorStoreID)
if err := dao.CreateEntity(db, FreightTemplate); err != nil { if err := dao.CreateEntity(db, FreightTemplate); err != nil {
if _, err1 := dao.UpdateEntity(db, FreightTemplate, "TemplateID", "WarehouseID", "FenceID", "TradeLimitID", "StoreID", "VendorStoreID"); err1 != 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 { } else {
errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err)) globals.SugarLogger.Debug("创建操作,同步进数据库错误信息:%v", err)
//errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err))
} }
} }
endErr := errList.GetErrListAsOne() endErr := errList.GetErrListAsOne()
@@ -369,105 +371,110 @@ func (P *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
db = dao.GetDB() db = dao.GetDB()
} }
storeInfo, err = dao.GetStoreDetail(db, storeID, model.VendorIDDD, "") 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) apiObj := getAPI(storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID)
if globals.EnableDdStoreWrite { //判断是否需要更新
remoteStoreInfo, err2 := apiObj.GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ if !IsNeedStoreUpdate(storeInfo, utils.Int2Str(storeID)) {
StoreId: storeInfo.VendorStoreID, return nil
}) } else {
if err2 != nil { if storeInfo.OpenTime1 != 0 && storeInfo.CloseTime1 != 0 {
return err2 if storeInfo.OpenTime2 != 0 && storeInfo.CloseTime2 != 0 {
} timeStr = SplicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, storeInfo.OpenTime2, storeInfo.CloseTime2, true)
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
} else { } else {
if fenceID, err := CreateFenceByStore(storeInfo.VendorOrgCode, int64(storeID)); err != nil || len(fenceID) == 0 { //创建 timeStr = SplicingTimeToDoudian(storeInfo.OpenTime1, storeInfo.CloseTime1, 0, 0, false)
globals.SugarLogger.Debug("门店(%d) 创建电子围栏失败:%v", storeID, err) }
errList.AddErr(fmt.Errorf("门店(%d) 创建电子围栏失败:%v", storeID, err)) for j := 1; j <= 7; j++ {
} else { m[int64(j)] = timeStr
tempFenceID = fenceID }
} 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 { 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)
globals.SugarLogger.Debug("门店(%d) 绑定电子围栏:%s失败:%v", storeID, tempFenceID, err) event.AddOperateEvent(jxcontext.AdminCtx, jxcontext.AdminCtx.GetTrackInfo(), store, "", "", 10, "UpdateStore")
errList.AddErr(fmt.Errorf("门店(%d) 绑定电子围栏:%s失败:%v", storeID, tempFenceID, err)) 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 { //修改店铺状态
//默认更新第一个电子围栏 if storeInfo.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreStatus) != 0 {
outFenceID := bind[storeInfo.VendorStoreID][0].OutFenceIds[0] errList.AddErr(UpdateStoreStatus(jxcontext.AdminCtx, storeInfo.VendorOrgCode, storeID, storeInfo.VendorStoreID, mergedStoreStatus))
if err = UpdateFenceByStore(storeInfo.VendorOrgCode, outFenceID, storeID); err != nil { }
errList.AddErr(errors.New(fmt.Sprintf("更新电子围栏失败,原因:%v", err))) 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.FenceID = tempFenceID FreightTemplate.StoreID = storeID
FreightTemplate.StoreID = storeID FreightTemplate.VendorStoreID = storeInfo.VendorStoreID
FreightTemplate.VendorStoreID = storeInfo.VendorStoreID if err = dao.CreateEntity(db, FreightTemplate); err != nil {
if err = dao.CreateEntity(db, FreightTemplate); err != nil { if _, err1 := dao.UpdateEntity(db, FreightTemplate, "FenceID", "StoreID", "VendorStoreID"); err1 != nil {
if _, err1 := dao.UpdateEntity(db, FreightTemplate, "FenceID", "StoreID", "VendorStoreID"); err1 != nil { errList.AddErr(fmt.Errorf("更新操作,同步进数据库错误信息:%v", err1))
globals.SugarLogger.Debugf("db update storeID,vendorStoreID defeat on :%v", err1) } else {
//errList.AddErr(fmt.Errorf("更新操作,同步进数据库错误信息:%v", err1)) errList.AddErr(fmt.Errorf("创建操作,同步进数据库错误信息:%v", err))
} else { }
globals.SugarLogger.Debugf("db create storeID,vendorStoreID defeat on :%v", err)
//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 门店恢复营业 // UpdateStoreStatus shop/unsuspendStore 门店恢复营业
@@ -1014,6 +1021,7 @@ func (p *PurchaseHandler) GetSkus(ctx *jxcontext.Context, vendorOrgCode string,
} }
//以下为辅助函数 //以下为辅助函数
type RelInfo struct { type RelInfo struct {
StoreID string `json:"storeID"` StoreID string `json:"storeID"`
VendorStoreID string `json:"vendorStoreID"` VendorStoreID string `json:"vendorStoreID"`
@@ -1042,13 +1050,45 @@ func HandleMunicipality(cityName string) bool {
//判断门店是否审核通过 //判断门店是否审核通过
func IfAuditPass(vendorOrgCode string, vendorStoreID int64) bool { func IfAuditPass(vendorOrgCode string, vendorStoreID int64) bool {
flag := false
if remoteStore, err := getAPI(vendorOrgCode, 0, " ").GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{ if remoteStore, err := getAPI(vendorOrgCode, 0, " ").GetStoreDetail(&shop_getStoreDetail_request.ShopGetStoreDetailParam{
StoreId: utils.Int64ToStr(vendorStoreID), StoreId: utils.Int64ToStr(vendorStoreID),
}); err == nil { }); 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 { 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
} }

View File

@@ -2,6 +2,8 @@ package tiktok_store
import ( import (
"errors" "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_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" 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" "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 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
}
}