Merge branch 'jdshop' of e.coding.net:rosydev/jx-callback into jdshop
This commit is contained in:
@@ -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 { // 因为有些平台设置配送中后,不会发送订单在配送中消息过来,所以成功后就强制设置状态为配送中
|
||||
|
||||
@@ -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) &&
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -24,6 +24,7 @@ const (
|
||||
CancelWaybillReasonNotAcceptIntime = 1
|
||||
CancelWaybillReasonSwitch2SelfFailed = 2
|
||||
CancelWaybillReasonOther = 10
|
||||
CancelWaybillReasonDYPSCancel = 11 //抖音门店转自送,取消自动运力
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -73,6 +74,7 @@ var (
|
||||
CancelWaybillReasonStrOrderAlreadyFinished = "订单已经结束"
|
||||
CancelWaybillReasonStrActive = "操作由人员主动发起"
|
||||
CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内"
|
||||
CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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"`
|
||||
@@ -1041,13 +1049,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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user