Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -182,7 +182,7 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m
|
||||
c.OnOrderNew(order, orderStatus)
|
||||
}
|
||||
}
|
||||
} else if loadOrder.Status < model.OrderStatusAccepted {
|
||||
} else if loadOrder.Status < model.OrderStatusAccepted && loadOrder.VendorID == model.VendorIDTaoVegetable {
|
||||
loadOrder.Status = model.OrderStatusAccepted
|
||||
loadOrder.VendorStatus = tao_vegetable.OrderStatusNew
|
||||
c.UpdateOrderFields(loadOrder, []string{"Status", "VendorStatus"})
|
||||
|
||||
@@ -141,7 +141,7 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName
|
||||
} else if order.VendorID == model.VendorIDDD { //抖音配送
|
||||
localBill, _ := partner.CurOrderManager.LoadWaybill(order.VendorWaybillID, order.WaybillVendorID)
|
||||
// 获取抖音配送状态
|
||||
tiktokWayBillStatus, _ := partner.GetPurchasePlatformFromVendorID(order.VendorID).OrderLogisticsStatus(order.VendorOrderID)
|
||||
tiktokWayBillStatus, err2 := partner.GetPurchasePlatformFromVendorID(order.VendorID).OrderLogisticsStatus(order.VendorOrderID)
|
||||
if tiktokWayBillStatus != nil && tiktokWayBillStatus.LogisticsStatus >= tiktokShop.ShipmentStatusReceived && tiktokWayBillStatus.LogisticsStatus != tiktokShop.ShipmentStatusCanceled {
|
||||
//取消抖音配送转自送
|
||||
err = c.CancelWaybill(localBill, partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel+"抖音骑手已经接单,无法取消")
|
||||
@@ -151,7 +151,10 @@ func (c *BaseScheduler) SelfDeliverDelivering(order *model.GoodsOrder, userName
|
||||
if err := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).SelfDeliverDelivering(order, userName); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "抖音转自送,平台无运力", "tiktokWayBillStatus = -1")
|
||||
}
|
||||
} else if (err2 != nil && strings.Contains(err2.Error(), "当前状态获取不到运力信息")) || (tiktokWayBillStatus != nil && tiktokWayBillStatus.LogisticsStatus == tiktokShop.ShipmentStatusCanceled) {
|
||||
partner.GetPurchasePlatformFromVendorID(order.VendorID).SelfDeliverDelivering(order, "")
|
||||
} else if err = partner.GetPurchasePlatformFromVendorID(order.VendorID).CancelLogisticsByWmOrderId(order, "", "", order.VendorStoreID, order.VendorOrderID); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "取消抖音配送异常:", err.Error())
|
||||
if err = c.CancelWaybill(localBill, partner.CancelWaybillReasonDYPSCancel, partner.CancelWaybillReasonStrDYPSCancel); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "取消抖音平台运单错误,无法转自送", err.Error())
|
||||
return err
|
||||
|
||||
@@ -949,6 +949,11 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
||||
valid["name"] = jxutils.FormalizeName(valid["name"].(string))
|
||||
store.Name = valid["name"].(string)
|
||||
syncStatus |= model.SyncFlagStoreName
|
||||
courierList, _ := dao.GetStoreCourierList2(db, []int{storeID}, nil, 0, nil)
|
||||
for _, v := range courierList {
|
||||
v.VendorStoreName = store.Name
|
||||
dao.UpdateEntity(db, v, "VendorStoreName")
|
||||
}
|
||||
}
|
||||
printerVendorID := int(utils.Interface2Int64WithDefault(valid["printerVendorID"], 0))
|
||||
if printerVendorID == 0 {
|
||||
@@ -1143,7 +1148,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
|
||||
TryAddStoreBossRole4StoreByMobile(ctx, store.ID, []string{utils.Interface2String(valid["tel1"]), utils.Interface2String(valid["tel2"])})
|
||||
}
|
||||
if syncStatus&model.SyncFlagStoreAddress != 0 || valid["tel1"] != nil || valid["payeeName"] != nil {
|
||||
// 修改门店信息(第三方平台同步)
|
||||
// 修改门店信息(第三方配送平台同步)
|
||||
updateCourierStores(ctx, storeID)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ func Init() {
|
||||
orderman.UpdateTiktokShopTotalMoney()
|
||||
}, []string{
|
||||
"03:35:00",
|
||||
"16:35:00",
|
||||
"11:05:00",
|
||||
})
|
||||
/// 更新淘鲜达结算信息
|
||||
ScheduleTimerFunc("UpdateTaoTotalMoney", func() {
|
||||
@@ -272,7 +272,7 @@ func Init() {
|
||||
ScheduleTimerFuncByInterval(func() {
|
||||
curDate := utils.Time2Date(time.Now())
|
||||
orderman.FixedOrderManager.AmendMissingOrders(jxcontext.AdminCtx, []int{model.VendorIDJD, model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDDD}, 0, curDate, curDate, true, true)
|
||||
}, 5*time.Second, 10*time.Minute)
|
||||
}, 5*time.Second, 5*time.Minute)
|
||||
|
||||
// 抖音更新门店商品 ,接口收费暂不使用
|
||||
//if beego.BConfig.RunMode != "jxgy" {
|
||||
|
||||
@@ -345,7 +345,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap
|
||||
return response
|
||||
} else {
|
||||
status := c.callbackMsg2Status(msg)
|
||||
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 {
|
||||
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 1 { // 重复消息推送校验,允许推送两次
|
||||
return nil
|
||||
}
|
||||
if msg.Cmd == mtwmapi.MsgTypeNewOrder {
|
||||
@@ -503,7 +503,6 @@ func (c *PurchaseHandler) postFakeMsg(vendorOrderID, cmd, vendorStatus string) {
|
||||
func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool, userName string) (err error) {
|
||||
if isAcceptIt {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
// err = api.MtwmAPI.OrderReceived(utils.Str2Int64(order.VendorOrderID))
|
||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderConfirm(utils.Str2Int64(order.VendorOrderID))
|
||||
if err != nil {
|
||||
if utils.IsErrMatch(err, utils.Int2Str(mtwmapi.ErrCodeOpFailed), []string{
|
||||
@@ -515,9 +514,6 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
||||
}
|
||||
}
|
||||
}
|
||||
// if err == nil {
|
||||
// c.postFakeMsg(order.VendorOrderID, FakeMsgType, mtwmapi.OrderStatusReceived)
|
||||
// }
|
||||
} else {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
err = c.CancelOrder(jxcontext.AdminCtx, order, "bu")
|
||||
|
||||
@@ -2,6 +2,7 @@ package mtwm
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
@@ -392,6 +393,28 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
if storeSku.DescImg != "" {
|
||||
foodData["picture_contents"] = storeSku.DescImg
|
||||
}
|
||||
// 周期性可售时间段
|
||||
if storeSku.StatusSaleBegin != model.NO && storeSku.StatusSaleEnd != model.NO {
|
||||
saleStart := utils.Int2Str(int(storeSku.StatusSaleBegin))
|
||||
saleEnd := utils.Int2Str(int(storeSku.StatusSaleEnd))
|
||||
for {
|
||||
if len(saleStart) != 4 {
|
||||
saleStart = "0" + saleStart
|
||||
}
|
||||
if len(saleEnd) != 4 {
|
||||
saleEnd += "0" + saleEnd
|
||||
}
|
||||
if len(saleEnd) == 4 && len(saleStart) == 4 {
|
||||
break
|
||||
}
|
||||
}
|
||||
saleStart = fmt.Sprintf("%s:%s", saleStart[:2], saleStart[2:])
|
||||
saleEnd = fmt.Sprintf("%s:%s", saleEnd[:2], saleEnd[2:])
|
||||
availableTimes := fmt.Sprintf("%s-%s", saleStart, saleEnd)
|
||||
available, _ := json.Marshal(map[string]string{"monday": availableTimes, "tuesday": availableTimes, "wednesday": availableTimes, "thursday": availableTimes, "friday": availableTimes, "saturday": availableTimes, "sunday": availableTimes})
|
||||
foodData["available_times"] = string(available)
|
||||
|
||||
}
|
||||
foodData["sequence"] = storeSku.GetSeq()
|
||||
if storeSku.VendorVendorCatID != 0 {
|
||||
foodData["tag_id"] = utils.Int64ToStr(storeSku.VendorVendorCatID)
|
||||
|
||||
@@ -386,6 +386,15 @@ func (c *PurchaseHandler) onAfsOrderMsg(status string, msg interface{}) (retVal
|
||||
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||
// 取消三方运单
|
||||
waybill, _ := dao.GetWaybills(db, goodsOrder.VendorOrderID, []int64{model.VendorIDMTPS, model.VendorIDDada, model.VendorIDFengNiao, model.VendorIDUUPT, model.VendorIDSFPS})
|
||||
for _, v := range waybill {
|
||||
err = partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID).Handler.CancelWaybill(v, 0, "订单被取消了")
|
||||
if err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(goodsOrder, fmt.Sprintf("订单[%s]被取消了,运单[%s]取消失败Err: %s", goodsOrder.VendorOrderID, v.VendorWaybillID, err.Error()), "")
|
||||
} else {
|
||||
partner.CurOrderManager.OnOrderMsg(goodsOrder, fmt.Sprintf("订单[%s]被取消了,运单[%s]取消成功", goodsOrder.VendorOrderID, v.VendorWaybillID), "")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -512,7 +521,7 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
|
||||
for _, v := range afsSkuOrder {
|
||||
subRefundList = append(subRefundList, domain3156.AlibabaTclsAelophyRefundAgreeSubrefundlist{
|
||||
OutSubOrderId: utils.String2Pointer(v.VendorSubOrderID),
|
||||
RefundFee: utils.Int64ToPointer(v.UserMoney),
|
||||
RefundFee: utils.Int64ToPointer(v.UserMoney / int64(v.Count)),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -242,9 +242,10 @@ func (p *PurchaseHandler) getOrder(vendorOrgCode, vendorOrderID, vendorStoreID s
|
||||
|
||||
// GetOrderRider 商家自配送同步配送信息
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
appKey := `7152420904331429407` // 暂时定死
|
||||
appSecret := `cc7ba367-2394-4cbb-81c6-26f0e929d1c6` //暂时定死
|
||||
return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfoNew(param)
|
||||
//appKey := `7152420904331429407` // 暂时定死
|
||||
//appSecret := `cc7ba367-2394-4cbb-81c6-26f0e929d1c6` //暂时定死
|
||||
//return tiktokShop.NewExpress(appKey, appSecret, "").OrderStatusAndPsInfoNew(param)
|
||||
return getAPI(vendorOrgCode, 0, vendorStoreID).OrderStatusAndPsInfoNew(param)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID, vendorStoreID string) (order *model.GoodsOrder, err error) {
|
||||
@@ -653,13 +654,21 @@ func (c *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName
|
||||
ThirdCarrierOrderId: order.VendorOrderID,
|
||||
CourierName: "",
|
||||
CourierPhone: "",
|
||||
LogisticsProviderCode: "10002",
|
||||
LogisticsProviderCode: utils.MyselfPsCode,
|
||||
LogisticsStatus: 0,
|
||||
LogisticsContext: "商家自配送,已送达",
|
||||
Latitude: "",
|
||||
Longitude: "",
|
||||
OpCode: tiktokShop.TiktokLogisticsDELIVERED,
|
||||
}
|
||||
bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
|
||||
for _, v := range bills {
|
||||
if v.Status == model.OrderStatusCanceled {
|
||||
continue
|
||||
}
|
||||
riderInfo.CourierName = v.CourierName
|
||||
riderInfo.CourierPhone = v.CourierMobile
|
||||
}
|
||||
return c.GetOrderRider("", "", utils.Struct2MapByJson(riderInfo))
|
||||
}
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *
|
||||
}
|
||||
} else {
|
||||
if err2 := partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus); err2 == nil {
|
||||
if msgId == tiktokShop.CallbackRefundOrderSuccessMsgTagId {
|
||||
if msgId == tiktokShop.CallbackRefundOrderSuccessMsgTagId || msgId == tiktokShop.CallbackReturnRefundAgreedMsgTagId {
|
||||
skuList, _ := dao.GetSimpleOrderSkus(db, orderStatus.RefVendorOrderID, nil)
|
||||
totalSkuCount := 0
|
||||
for _, v := range skuList {
|
||||
@@ -142,6 +142,16 @@ func (c *PurchaseHandler) onAfsOrderMsg(msgId string, msg interface{}) (retVal *
|
||||
goodsOrder.VendorStatus = orderStatus.VendorStatus
|
||||
dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus")
|
||||
// 取消三方运单
|
||||
wayBill, _ := dao.GetWaybills(db, orderStatus.RefVendorOrderID, nil)
|
||||
for _, v := range wayBill {
|
||||
if v.Status != model.WaybillStatusCanceled {
|
||||
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(v.WaybillVendorID); handlerInfo != nil {
|
||||
if err := handlerInfo.Handler.CancelWaybill(v, 0, "订单被取消了"); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(goodsOrder, "", fmt.Sprintf("抖店订单取消时,取消运单异常:%s", err.Error()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -39,7 +39,18 @@ func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string)
|
||||
|
||||
func (c *PurchaseHandler) onWaybillMsg(tag, orderId string, data interface{}) *tiktok_api.CallbackResponse {
|
||||
waybill := c.callbackMsg2Waybill(tag, orderId, data)
|
||||
if localOrder, err := partner.CurOrderManager.LoadOrder(waybill.VendorOrderID, model.VendorIDDD); err == nil {
|
||||
localOrder, _ := partner.CurOrderManager.LoadOrder(waybill.VendorOrderID, model.VendorIDDD)
|
||||
// 当前订单的运力状态发生变化时,抖店侧会对open侧推送消息。当前运力状态变化的原因有两个来源:1:呼叫平台运力,平台运力有变化,此时会推送消息;2:商家自配,erp通过回传配送状态触发运力状态变化,此时也会推送消息
|
||||
// 问题:当前两种消息来源是没有区分的,都是统一发送消息,但erp侧针对不同的情况有特殊处理,因此需要区分这两种消息
|
||||
// 当本地记录骑手数据(非抖音平台运单)与当前运单匹配上是,就直接返回
|
||||
if waybill.CourierName != "" && waybill.CourierMobile != "" {
|
||||
localWaybill, _ := dao.GetWaybills(dao.GetDB(), localOrder.VendorOrderID, nil)
|
||||
for _, v := range localWaybill {
|
||||
if v.CourierName != "" && v.CourierMobile != "" && v.WaybillVendorID != model.VendorIDDD && v.CourierName == waybill.CourierName && v.CourierMobile == waybill.CourierMobile {
|
||||
return tiktok_api.Err2CallbackResponse(nil, "")
|
||||
}
|
||||
}
|
||||
}
|
||||
err := partner.CurOrderManager.OnWaybillStatusChanged(waybill)
|
||||
if err == nil {
|
||||
status := &model.OrderStatus{
|
||||
@@ -59,11 +70,16 @@ func (c *PurchaseHandler) onWaybillMsg(tag, orderId string, data interface{}) *t
|
||||
},
|
||||
}
|
||||
err = partner.CurOrderManager.OnOrderStatusChanged(localOrder.VendorOrgCode, status)
|
||||
if err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(localOrder, "", "抖店运单骑手状态修改异常:"+err.Error())
|
||||
}
|
||||
if status.VendorStatus == utils.Int2Str(tiktok_api.ShipmentStatusCanceled) {
|
||||
localOrder.Status = model.WaybillStatusCourierArrived
|
||||
dao.UpdateEntity(dao.GetDB(), localOrder, "Status")
|
||||
}
|
||||
}
|
||||
return tiktok_api.Err2CallbackResponse(err, "")
|
||||
}
|
||||
return tiktok_api.Err2CallbackResponse(nil, "")
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackMsg2Waybill(tag, orderId string, data interface{}) (retVal *model.Waybill) {
|
||||
req := data.(tiktok_api.ShipmentInfoData)
|
||||
|
||||
Reference in New Issue
Block a user