diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index ed807e0d7..7e957ecbe 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -382,9 +382,9 @@ func (c *BaseScheduler) CheckStoreBalanceWithTip(ctx *jxcontext.Context, order * if roundTipFee != tipFee { return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("小费必须是1元的整数倍") } - if order.WaybillTipMoney >= tipFee { - return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("本次小费金额不能小于已经支付的小费") - } + //if order.WaybillTipMoney >= tipFee { + // return model.ErrCodeOnePayTipFeeMore, fmt.Errorf("本次小费金额不能小于已经支付的小费") + //} if order.CreateDeliveryType == model.YES { //加小费只判断余额 storeAcct, err := cms.GetStoreAcctBalance(ctx, jxutils.GetSaleStoreIDFromOrder(order)) diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 12cd02527..3477ec3ae 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -950,7 +950,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf if err == nil && err2 == nil { // 1.检查门店三方配送配置,达达>蜂鸟>美团>顺丰>uu // excludeVendorIDs 包括上面已经发送的平台id - storeCourierList, err := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated}) + storeCourierList, _ := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated}) excludeVendorIDsMap := make(map[int]int, 0) // 被排除的配送 for _, v := range excludeVendorIDs { excludeVendorIDsMap[v] = model.YES @@ -989,9 +989,17 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf } if vendorID != model.NO { - if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil { - savedOrderInfo.retryCount++ - partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("订单自动创建三方运单成功:%s", jxutils.GetVendorName(vendorID))) + if bills, err := s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil { + for _, v := range bills { + if v.DesiredFee >= model.AlarmFee { + s.CancelWaybill(v, 0, partner.CancelWaybillReasonStrDeliveryFeeUp) + partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("发起自动创建三方运单,目标创建运单平台[%s],创建失败:%s", jxutils.GetVendorName(vendorID), partner.CancelWaybillReasonStrDeliveryFeeUp)) + } else { + savedOrderInfo.retryCount++ + partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("订单自动创建三方运单成功:%s", jxutils.GetVendorName(vendorID))) + + } + } } else { partner.CurOrderManager.OnOrderMsg(order, utils.Int2Str(vendorID), fmt.Sprintf("发起自动创建三方运单,目标创建运单平台[%s],创建失败:%v", jxutils.GetVendorName(vendorID), err)) } diff --git a/business/jxcallback/scheduler/defsch/defsch_ext.go b/business/jxcallback/scheduler/defsch/defsch_ext.go index cde152d6c..f719bc95f 100644 --- a/business/jxcallback/scheduler/defsch/defsch_ext.go +++ b/business/jxcallback/scheduler/defsch/defsch_ext.go @@ -287,6 +287,16 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor return nil, errCode, err } } + excludeCourierVendorIDs := make([]int, 0, 0) + allDelivery := map[int]int{model.VendorIDFengNiao: 1, model.VendorIDDada: 1, model.VendorIDMTPS: 1, model.VendorIDUUPT: 1, model.VendorIDSFPS: 1} + for _, v := range courierVendorIDs { + if allDelivery[v] == model.YES { + delete(allDelivery, v) + } + } + for k, _ := range allDelivery { + excludeCourierVendorIDs = append(excludeCourierVendorIDs, k) + } billFunc := func() { bills, err = func() (bills []*model.Waybill, err error) { @@ -312,7 +322,7 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor order.DeliveryFlag = 0 err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order) // 创建订单 - if bills, err = s.CreateWaybillOnProviders4SavedOrder(ctx, savedOrderInfo, courierVendorIDs, nil, forceCreate, maxDeliveryFee); err == nil && len(bills) > 0 { + if bills, err = s.CreateWaybillOnProviders4SavedOrder(ctx, savedOrderInfo, courierVendorIDs, excludeCourierVendorIDs, forceCreate, maxDeliveryFee); err == nil && len(bills) > 0 { partner.CurOrderManager.OnOrderMsg(order, "手动创建运单成功", fmt.Sprintf("%s创建%s平台运单,强发:%t,最高限价:%d", ctx.GetUserName(), model.VendorChineseNames[bills[0].WaybillVendorID], forceCreate, maxDeliveryFee)) } } diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 722848180..99aaa627e 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -794,12 +794,14 @@ func CreateActForMtByOrder(ctx *jxcontext.Context, act *model.Act, vendorIDs []i ActPrice: jxutils.IntPrice2Standard(int64(v.JdsPrice)), }) } - sort.Slice(actData, func(i, j int) bool { - return actData[i].ActPrice < actData[j].ActPrice - }) + //sort.Slice(actData, func(i, j int) bool { + // return actData[i].ActPrice < actData[j].ActPrice + //}) //for i := 1; i <= len(actData); i++ { // actData[i-1].Sequence = i //} + + actIdResult := make(map[string]int64, 0) actResult, faileInfoList, _ := api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData) for _, v := range actResult { var ( @@ -813,7 +815,27 @@ func CreateActForMtByOrder(ctx *jxcontext.Context, act *model.Act, vendorIDs []i actStoreSkuMapUpdate.VendorActID = utils.Int64ToStr(v.ActID) dao.UpdateEntity(db, actStoreSkuMapUpdate, "VendorActID") } + actIdResult[v.AppFoodCode] = v.ActID } + + // RetailDiscountBatchSave2 创建时无法使用排序,只能更时排序生效所以这样写,美团恢复可以删除 + actData2 := make([]*mtwmapi.RetailDiscountActData, 0, 0) + if len(actIdResult) != model.NO { + for _, v := range actData { + if actIdResult[v.AppFoodCode] != model.NO { + v.ItemID = actIdResult[v.AppFoodCode] + } + actData2 = append(actData2, v) + } + sort.Slice(actData2, func(i, j int) bool { + return actData2[i].ActPrice < actData2[j].ActPrice + }) + for i := 1; i <= len(actData2); i++ { + actData2[i-1].Sequence = i + } + api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData2) + } + for _, v := range faileInfoList { err2 += fmt.Sprintf("创建失败!门店ID:[%v],商品ID:[%v],原因:[%v]", storeID, v.AppFoodCode, v.ErrorMsg) } diff --git a/business/model/order.go b/business/model/order.go index 5f14ea437..66bef4fdc 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -137,7 +137,7 @@ type GoodsOrder struct { ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间 CancelApplyReason string `orm:"size(255)" json:"-"` // ""表示没有申请,不为null表示用户正在取消申请 DeliveryType string `orm:"size(32)" json:"deliveryType"` // 订单配送方式,缺省是平台配送 - CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` //默认0系统发单,1为门店发单 + CreateDeliveryType int `orm:"default(0)" json:"createDeliveryType"` // 默认0系统发单,1为门店发单 VendorWaybillID string `orm:"column(vendor_waybill_id);size(48)" json:"vendorWaybillID"` // 运单id WaybillVendorID int `orm:"column(waybill_vendor_id)" json:"waybillVendorID"` // 表示当前承运商,-1表示还没有安排 AdjustCount int8 `json:"adjustCount"` // 调整单(次数) diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index f908729f7..8294b1b88 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -394,6 +394,7 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee return nil, err } } + if result == nil { return nil, errors.New("达达配送,平台调用错误,无订单数据返回") } diff --git a/business/partner/delivery/delivery.go b/business/partner/delivery/delivery.go index c29b87d75..2dc292312 100644 --- a/business/partner/delivery/delivery.go +++ b/business/partner/delivery/delivery.go @@ -21,6 +21,9 @@ const ( ) func CallCreateWaybillPolicy(deliveryFee, maxDeliveryFee int64, order *model.GoodsOrder, waybillVendorID int) (err error) { + if maxDeliveryFee != model.NO { + return nil + } if maxDeliveryFee <= model.DefMaxDeliveryFee { maxDeliveryFee = model.DefMaxDeliveryFee } diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index e7795bbcb..1a3834ba2 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -319,7 +319,7 @@ func (c *DeliveryHandler) GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInf return deliveryFeeInfo, err } -// CreateWaybill(美团配送) +// CreateWaybill (美团配送) func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee int64) (bill *model.Waybill, err error) { db := dao.GetDB() // 检查配送平台是否被禁用 @@ -331,17 +331,6 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee return nil, fmt.Errorf("此平台配送已被系统关闭,暂不发配送 [%v]", vendorOrgCode[0].Comment) } - globals.SugarLogger.Debugf("===================maxDeliveryFee := %d", maxDeliveryFee) - if maxDeliveryFee == model.NO { - fee, err := c.GetWaybillFee(order) - if err != nil { - return nil, err - } - if fee.DeliveryFee >= model.DefMaxDeliveryFee { - return nil, fmt.Errorf("美团配送超最高限价, 所需运费:%s, 最高限价:%s", jxutils.IntPrice2StandardCurrencyString(fee.DeliveryFee), jxutils.IntPrice2StandardCurrencyString(model.DefMaxDeliveryFee)) - } - } - // 忽略坐标转换错误,即使是转换出错,也只能当成转换成功来处理,底层会有错误日志输出 lngFloat, latFloat, _ := jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType) billParams := &mtpsapi.CreateOrderByShopParam{ diff --git a/business/partner/partner.go b/business/partner/partner.go index 47efb81a7..e08ec3c21 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -75,6 +75,7 @@ var ( CancelWaybillReasonStrActive = "操作由人员主动发起" CancelWaybillReasonNotInStoreOpenTime = "不在门店的营业时间范围内" CancelWaybillReasonStrDYPSCancel = "抖音门店转自送,取消自动运力" + CancelWaybillReasonStrDeliveryFeeUp = "配送距离太远,配送费超过15元" ) var ( diff --git a/business/partner/purchase/ebai/order.go b/business/partner/purchase/ebai/order.go index b48d10d47..1507eaa46 100644 --- a/business/partner/purchase/ebai/order.go +++ b/business/partner/purchase/ebai/order.go @@ -796,7 +796,7 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G } func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { - return fmt.Errorf("饿了么暂无投诉骑手API") + return fmt.Errorf("饿了么暂无投诉骑手,请联系饿了么客服") } // 转自配送时取消非专送混合送门店取消理由 diff --git a/business/partner/purchase/jdshop/order.go b/business/partner/purchase/jdshop/order.go index 95f0904af..c78bc4b8e 100644 --- a/business/partner/purchase/jdshop/order.go +++ b/business/partner/purchase/jdshop/order.go @@ -311,7 +311,7 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, vendorOrgCode strin } func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { - return err + return fmt.Errorf("暂无投诉渠道,请致电京东客服") } // 转自配送时取消非专送混合送门店取消理由 diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 02f6b66db..c7218bed6 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -537,7 +537,7 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo // 美团专送、快送、混合送、美团企客 logisticsCode := utils.Interface2String(orderDetail["logistics_code"]) - isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe + isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe || logisticsCode == mtwmapi.PeiSongTypeMixedExpressQiKe //1001-专送(加盟);1002-专送(自建) //2002-快送;3001-混合送(专送+快送) //4015-企客远距离配送 @@ -554,6 +554,7 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo //PeiSongTypeKuaiDi = "2002" // 快送 //PeiSongTypeWholeCity = "2010" // 全城送 //PeiSongTypeMixed = "3001" // 混合送(即美团专送+快送) + //PeiSongTypeMixedExpressQiKe = "30012002" // 混合送(混合快送) if isSelfDelivery { err = api.PreparationMealComplete(utils.Str2Int64(order.VendorOrderID)) } diff --git a/business/partner/purchase/tiktok_store/order.go b/business/partner/purchase/tiktok_store/order.go index 46688fdbe..ba3903548 100644 --- a/business/partner/purchase/tiktok_store/order.go +++ b/business/partner/purchase/tiktok_store/order.go @@ -990,7 +990,7 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G } func (c *PurchaseHandler) ComplaintRider(vendorOrderId string, resonID int, resonContent string) (err error) { - return fmt.Errorf("抖店暂不提供投诉骑手API") + return fmt.Errorf("抖店暂不提供投诉骑手API,联系客服") } // GetCancelDeliveryReason 转自配送时取消非专送混合送门店取消理由 diff --git a/controllers/taobao_vegetable.go b/controllers/taobao_vegetable.go index bdc5cf331..7595e0709 100644 --- a/controllers/taobao_vegetable.go +++ b/controllers/taobao_vegetable.go @@ -224,10 +224,19 @@ func (c *TaoBaoVegetableController) CancelOnSaleRefundOrder() { return } default: - //callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), afsOrder) - //c.Data["json"] = callbackResponse order, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), model.VendorIDTaoVegetable) - if err != nil || order.Status >= model.OrderStatusDelivering { + if err != nil { + c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(nil) + c.ServeJSON() + return + } + if order.Status == model.OrderStatusCanceled { + c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(nil) + c.ServeJSON() + return + } + + if order.Status >= model.OrderStatusDelivering { c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(fmt.Errorf("不支持售中取消")) c.ServeJSON() } else {